{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import io\n",
    "import os\n",
    "import platform\n",
    "import pdb\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from matplotlib.pyplot import cm\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "from sklearn import preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Temp (°C)</th>\n",
       "      <th>Dew Point Temp (°C)</th>\n",
       "      <th>Rel Hum (%)</th>\n",
       "      <th>Wind Dir (10s deg)</th>\n",
       "      <th>Wind Spd (km/h)</th>\n",
       "      <th>Stn Press (kPa)</th>\n",
       "      <th>SO2</th>\n",
       "      <th>NO</th>\n",
       "      <th>NO2</th>\n",
       "      <th>NOx</th>\n",
       "      <th>CO</th>\n",
       "      <th>O3</th>\n",
       "      <th>PM25</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>-6.8</td>\n",
       "      <td>-9.0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>99.50</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.16</td>\n",
       "      <td>27.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>-7.7</td>\n",
       "      <td>-9.9</td>\n",
       "      <td>84.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>99.60</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.16</td>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>-8.3</td>\n",
       "      <td>-9.9</td>\n",
       "      <td>88.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>99.70</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>-10.0</td>\n",
       "      <td>-12.7</td>\n",
       "      <td>80.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>99.86</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>29.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>-11.6</td>\n",
       "      <td>-15.0</td>\n",
       "      <td>76.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>-13.3</td>\n",
       "      <td>-16.2</td>\n",
       "      <td>79.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.24</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.14</td>\n",
       "      <td>31.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>-14.3</td>\n",
       "      <td>-18.0</td>\n",
       "      <td>74.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.36</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.13</td>\n",
       "      <td>32.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>-15.3</td>\n",
       "      <td>-18.9</td>\n",
       "      <td>74.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.54</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.14</td>\n",
       "      <td>31.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>-16.3</td>\n",
       "      <td>-20.0</td>\n",
       "      <td>73.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.72</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>104</th>\n",
       "      <td>-17.5</td>\n",
       "      <td>-21.4</td>\n",
       "      <td>71.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.85</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>105</th>\n",
       "      <td>-17.8</td>\n",
       "      <td>-21.7</td>\n",
       "      <td>71.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.14</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>-17.9</td>\n",
       "      <td>-22.2</td>\n",
       "      <td>69.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>101.06</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>32.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>-18.0</td>\n",
       "      <td>-22.4</td>\n",
       "      <td>68.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>101.13</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.14</td>\n",
       "      <td>33.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>-17.8</td>\n",
       "      <td>-22.2</td>\n",
       "      <td>68.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>101.16</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.16</td>\n",
       "      <td>34.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>109</th>\n",
       "      <td>-17.4</td>\n",
       "      <td>-21.9</td>\n",
       "      <td>68.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>101.24</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>33.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Temp (°C)  Dew Point Temp (°C)  Rel Hum (%)  Wind Dir (10s deg)  \\\n",
       "95        -6.8                 -9.0         85.0                 NaN   \n",
       "96        -7.7                 -9.9         84.0                 NaN   \n",
       "97        -8.3                 -9.9         88.0                 NaN   \n",
       "98       -10.0                -12.7         80.0                 NaN   \n",
       "99       -11.6                -15.0         76.0                 NaN   \n",
       "100      -13.3                -16.2         79.0                 NaN   \n",
       "101      -14.3                -18.0         74.0                 NaN   \n",
       "102      -15.3                -18.9         74.0                 NaN   \n",
       "103      -16.3                -20.0         73.0                 NaN   \n",
       "104      -17.5                -21.4         71.0                 NaN   \n",
       "105      -17.8                -21.7         71.0                 NaN   \n",
       "106      -17.9                -22.2         69.0                 NaN   \n",
       "107      -18.0                -22.4         68.0                 NaN   \n",
       "108      -17.8                -22.2         68.0                 NaN   \n",
       "109      -17.4                -21.9         68.0                 NaN   \n",
       "\n",
       "     Wind Spd (km/h)  Stn Press (kPa)  SO2   NO  NO2  NOx    CO    O3  PM25  \n",
       "95               0.0            99.50  0.0  1.0  3.0  4.0  0.16  27.0   4.0  \n",
       "96               0.0            99.60  0.0  1.0  3.0  4.0  0.16  28.0   4.0  \n",
       "97               0.0            99.70  1.0  1.0  2.0  3.0  0.15  28.0   4.0  \n",
       "98               0.0            99.86  0.0  1.0  2.0  3.0  0.15  29.0   3.0  \n",
       "99               0.0           100.04  NaN  NaN  NaN  NaN   NaN   NaN   3.0  \n",
       "100              0.0           100.24  1.0  1.0  2.0  3.0  0.14  31.0   3.0  \n",
       "101              0.0           100.36  1.0  1.0  3.0  4.0  0.13  32.0   3.0  \n",
       "102              0.0           100.54  0.0  1.0  4.0  5.0  0.14  31.0   3.0  \n",
       "103              0.0           100.72  0.0  2.0  4.0  6.0  0.15  31.0   2.0  \n",
       "104              0.0           100.85  0.0  2.0  5.0  7.0  0.15  31.0   2.0  \n",
       "105              0.0           100.99  0.0  2.0  4.0  6.0  0.14  31.0   2.0  \n",
       "106              0.0           101.06  0.0  2.0  3.0  6.0  0.15  32.0   2.0  \n",
       "107              0.0           101.13  0.0  3.0  3.0  6.0  0.14  33.0   2.0  \n",
       "108              0.0           101.16  0.0  2.0  3.0  6.0  0.16  34.0   2.0  \n",
       "109              0.0           101.24  1.0  4.0  5.0  9.0  0.15  33.0   2.0  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data=pd.read_csv('ottawa.csv')\n",
    "data.replace(9999,np.nan,inplace=True)\n",
    "data.replace(-999,np.nan,inplace=True)\n",
    "# data.fillna(np.mean(data),inplace=True)\n",
    "data[95:110]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(len(data)):\n",
    "    for j in range(len(data.columns)):\n",
    "        if np.isnan(data.iat[i,j]):\n",
    "            if i==0:\n",
    "                data.iloc[i,j]=data.iat[i+1,j]\n",
    "            elif i==len(data)-1:\n",
    "                data.iloc[i,j]=data.iat[i-1,j]\n",
    "            else:\n",
    "                data.iloc[i,j]=np.nanmean([data.iat[i-1,j],data.iat[i+1,j]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Temp (°C)</th>\n",
       "      <th>Dew Point Temp (°C)</th>\n",
       "      <th>Rel Hum (%)</th>\n",
       "      <th>Wind Dir (10s deg)</th>\n",
       "      <th>Wind Spd (km/h)</th>\n",
       "      <th>Stn Press (kPa)</th>\n",
       "      <th>SO2</th>\n",
       "      <th>NO</th>\n",
       "      <th>NO2</th>\n",
       "      <th>NOx</th>\n",
       "      <th>CO</th>\n",
       "      <th>O3</th>\n",
       "      <th>PM25</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-7.0</td>\n",
       "      <td>-13.8</td>\n",
       "      <td>58.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>100.17</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>27.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-6.8</td>\n",
       "      <td>-13.5</td>\n",
       "      <td>59.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.11</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>26.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-6.9</td>\n",
       "      <td>-13.7</td>\n",
       "      <td>58.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>100.10</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.19</td>\n",
       "      <td>27.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-7.1</td>\n",
       "      <td>-13.6</td>\n",
       "      <td>60.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.05</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>27.0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-7.1</td>\n",
       "      <td>-13.4</td>\n",
       "      <td>61.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>0.17</td>\n",
       "      <td>28.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Temp (°C)  Dew Point Temp (°C)  Rel Hum (%)  Wind Dir (10s deg)  \\\n",
       "0       -7.0                -13.8         58.0                22.0   \n",
       "1       -6.8                -13.5         59.0                22.0   \n",
       "2       -6.9                -13.7         58.0                23.0   \n",
       "3       -7.1                -13.6         60.0                23.0   \n",
       "4       -7.1                -13.4         61.0                23.0   \n",
       "\n",
       "   Wind Spd (km/h)  Stn Press (kPa)  SO2   NO  NO2   NOx    CO    O3  PM25  \n",
       "0             18.0           100.17  1.0  1.0  9.0  10.0  0.18  27.0   8.0  \n",
       "1             16.0           100.11  1.0  1.0  9.0  10.0  0.18  26.0   8.0  \n",
       "2             20.0           100.10  0.0  1.0  8.0   9.0  0.19  27.0   7.0  \n",
       "3             16.0           100.05  0.0  1.0  8.0   9.0  0.18  27.0   6.0  \n",
       "4             16.0           100.01  0.0  1.0  7.0   8.0  0.17  28.0   5.0  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset=pd.DataFrame(data,columns=data.columns[:])\n",
    "scaler = preprocessing.MinMaxScaler() \n",
    "scaled_values = scaler.fit_transform(dataset) \n",
    "# dataset.loc[:,:] = scaled_values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Temp (°C)</th>\n",
       "      <th>Dew Point Temp (°C)</th>\n",
       "      <th>Rel Hum (%)</th>\n",
       "      <th>Wind Dir (10s deg)</th>\n",
       "      <th>Wind Spd (km/h)</th>\n",
       "      <th>Stn Press (kPa)</th>\n",
       "      <th>SO2</th>\n",
       "      <th>NO</th>\n",
       "      <th>NO2</th>\n",
       "      <th>NOx</th>\n",
       "      <th>CO</th>\n",
       "      <th>O3</th>\n",
       "      <th>PM25</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-7.0</td>\n",
       "      <td>-13.8</td>\n",
       "      <td>58.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>100.17</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>27.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-6.8</td>\n",
       "      <td>-13.5</td>\n",
       "      <td>59.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.11</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>26.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-6.9</td>\n",
       "      <td>-13.7</td>\n",
       "      <td>58.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>100.10</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.19</td>\n",
       "      <td>27.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-7.1</td>\n",
       "      <td>-13.6</td>\n",
       "      <td>60.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.05</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.18</td>\n",
       "      <td>27.0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-7.1</td>\n",
       "      <td>-13.4</td>\n",
       "      <td>61.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>100.01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>0.17</td>\n",
       "      <td>28.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Temp (°C)  Dew Point Temp (°C)  Rel Hum (%)  Wind Dir (10s deg)  \\\n",
       "0       -7.0                -13.8         58.0                22.0   \n",
       "1       -6.8                -13.5         59.0                22.0   \n",
       "2       -6.9                -13.7         58.0                23.0   \n",
       "3       -7.1                -13.6         60.0                23.0   \n",
       "4       -7.1                -13.4         61.0                23.0   \n",
       "\n",
       "   Wind Spd (km/h)  Stn Press (kPa)  SO2   NO  NO2   NOx    CO    O3  PM25  \n",
       "0             18.0           100.17  1.0  1.0  9.0  10.0  0.18  27.0   8.0  \n",
       "1             16.0           100.11  1.0  1.0  9.0  10.0  0.18  26.0   8.0  \n",
       "2             20.0           100.10  0.0  1.0  8.0   9.0  0.19  27.0   7.0  \n",
       "3             16.0           100.05  0.0  1.0  8.0   9.0  0.18  27.0   6.0  \n",
       "4             16.0           100.01  0.0  1.0  7.0   8.0  0.17  28.0   5.0  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_set=np.asarray(dataset,dtype=np.float32)\n",
    "seq_len=30 + 1\n",
    "x=len(data_set)-seq_len\n",
    "sequences = [data_set[t:t+seq_len] for t in range(x)]\n",
    "for i in range(len(sequences)):\n",
    "    sequences[i]=scaler.fit_transform(sequences[i])\n",
    "seq=torch.FloatTensor(sequences)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([17513, 31, 13])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "split_row=round(0.90*seq.size(0))\n",
    "x_train_set=seq[:split_row, :-1]\n",
    "y_train_set=seq[:split_row, -1]\n",
    "x_valid_set=seq[split_row:, :-1]\n",
    "y_valid_set=seq[split_row:, -1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1751, 30, 13])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_valid_set.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "class LSTM(nn.Module):\n",
    "    def __init__(self,input_size,hidden_size,num_layers=2,dropout=0,bidirectional=False):\n",
    "        super(LSTM,self).__init__()\n",
    "        self.input_size=input_size\n",
    "        self.hidden_size=hidden_size\n",
    "        self.num_layers=num_layers\n",
    "        self.dropout=dropout\n",
    "        self.bidirectional=bidirectional\n",
    "        self.lstm = nn.LSTM(input_size,\n",
    "                            hidden_size,\n",
    "                            num_layers,\n",
    "                            dropout=dropout,\n",
    "                            bidirectional=bidirectional)\n",
    "        self.linear = nn.Linear(hidden_size, input_size)\n",
    "        \n",
    "    def forward(self,inputs,hidden):\n",
    "        outputs,hidden=self.lstm(inputs,hidden)\n",
    "        predictions=self.linear(outputs[-1])\n",
    "        return predictions,outputs,hidden\n",
    "    \n",
    "    def init_hidden(self,batch_size):\n",
    "        num_directions=2 if self.bidirectional else 1\n",
    "        hidden = (torch.zeros(self.num_layers*num_directions, batch_size, self.hidden_size),\n",
    "                  torch.zeros(self.num_layers*num_directions, batch_size, self.hidden_size))\n",
    "        return hidden"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_batch(x,y,i,batch_size):\n",
    "    if x.dim() == 2:\n",
    "        x = x.unsqueeze(2)\n",
    "    batch_x = x[(i*batch_size):(i*batch_size)+batch_size, :, :]\n",
    "    batch_y = y[(i*batch_size):(i*batch_size)+batch_size]\n",
    "\n",
    "    # Reshape Tensors into (seq_len, batch_size, input_size) format for the LSTM.\n",
    "    batch_x = batch_x.transpose(0, 1)\n",
    "    \n",
    "    return batch_x, batch_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(model,x_train_set,y_train_set,optimizer,batch_size,epoch):\n",
    "    num_sequences=x_train_set.size(0)\n",
    "    num_batches=num_sequences//batch_size\n",
    "    \n",
    "    total_loss=0\n",
    "    \n",
    "    model.train()\n",
    "    for i in range(num_batches):\n",
    "        # Get input and target batches and reshape for LSTM.\n",
    "        batch_x, batch_y = get_batch(x_train_set, y_train_set, i, batch_size)\n",
    "\n",
    "        # Reset the gradient.\n",
    "        lstm.zero_grad()\n",
    "        \n",
    "        # Initialize the hidden states (see the function lstm.init_hidden(batch_size)).\n",
    "        hidden = lstm.init_hidden(batch_size)\n",
    "        \n",
    "        # Complete a forward pass.\n",
    "        y_pred, outputs, hidden = lstm(batch_x,hidden)\n",
    "        \n",
    "        # Calculate the loss with the 'loss_fn'.\n",
    "        loss = loss_fn(y_pred,batch_y)\n",
    "        \n",
    "        # Compute the gradient.\n",
    "        loss.backward()\n",
    "        \n",
    "        # Clip to the gradient to avoid exploding gradient.\n",
    "        nn.utils.clip_grad_norm_(lstm.parameters(), max_grad_norm)\n",
    "\n",
    "        # Make one step with optimizer.\n",
    "        optimizer.step()\n",
    "        \n",
    "        # Accumulate the total loss.\n",
    "        total_loss += loss.data\n",
    "        \n",
    "    print(\"Epoch {}: Loss = {:.8f}\".format(epoch+1, total_loss/num_batches))\n",
    "    return total_loss/num_batches,y_pred[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval(model,x_valid_set,y_valid_set,optimizer,batch_size):\n",
    "    num_sequences=x_valid_set.size(0)\n",
    "    num_batches=num_sequences//batch_size\n",
    "    \n",
    "    total_loss=0\n",
    "    \n",
    "    model.eval()\n",
    "    for i in range(num_batches):\n",
    "        # Get input and target batches and reshape for LSTM.\n",
    "        batch_x, batch_y = get_batch(x_valid_set, y_valid_set, i, batch_size)\n",
    "\n",
    "        # Reset the gradient.\n",
    "        lstm.zero_grad()\n",
    "        \n",
    "        # Initialize the hidden states (see the function lstm.init_hidden(batch_size)).\n",
    "        hidden = lstm.init_hidden(batch_size)\n",
    "        \n",
    "        # Complete a forward pass.\n",
    "        y_pred, outputs, hidden = lstm(batch_x,hidden)\n",
    "        \n",
    "        # Calculate the loss with the 'loss_fn'.\n",
    "        loss = loss_fn(y_pred,batch_y)\n",
    "        \n",
    "        # Compute the gradient.\n",
    "        loss.backward()\n",
    "        \n",
    "        # Clip to the gradient to avoid exploding gradient.\n",
    "        nn.utils.clip_grad_norm_(lstm.parameters(), max_grad_norm)\n",
    "\n",
    "        # Make one step with optimizer.\n",
    "        optimizer.step()\n",
    "        \n",
    "        # Accumulate the total loss.\n",
    "        total_loss += loss.data\n",
    "\n",
    "    print(\"Validation: Loss = {:.8f}\".format(total_loss/num_batches))\n",
    "    return total_loss/num_batches,y_pred[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def save_model(epoch, model, path='./'):\n",
    "    \n",
    "    # file name and path \n",
    "    filename = path + 'ottawa.pt'\n",
    "    \n",
    "    # load the model parameters \n",
    "    torch.save(model.state_dict(), filename)\n",
    "    \n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_model(epoch, model, path='./'):\n",
    "    \n",
    "    # file name and path \n",
    "    filename = path + 'neural_network_{}.pt'.format(epoch)\n",
    "    \n",
    "    # load the model parameters \n",
    "    model.load_state_dict(torch.load(filename))\n",
    "    \n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training model for 30 epoch\n",
      "Epoch 1: Loss = 0.06733242\n",
      "Validation: Loss = 0.04130787\n",
      "Epoch 2: Loss = 0.03445249\n",
      "Validation: Loss = 0.03084633\n",
      "Epoch 3: Loss = 0.02905678\n",
      "Validation: Loss = 0.02776619\n",
      "Epoch 4: Loss = 0.02733302\n",
      "Validation: Loss = 0.02631226\n",
      "Epoch 5: Loss = 0.02670783\n",
      "Validation: Loss = 0.02581629\n",
      "Epoch 6: Loss = 0.02636225\n",
      "Validation: Loss = 0.02551269\n",
      "Epoch 7: Loss = 0.02608806\n",
      "Validation: Loss = 0.02525738\n",
      "Epoch 8: Loss = 0.02584216\n",
      "Validation: Loss = 0.02501278\n",
      "Epoch 9: Loss = 0.02563153\n",
      "Validation: Loss = 0.02480680\n",
      "Epoch 10: Loss = 0.02546387\n",
      "Validation: Loss = 0.02464505\n",
      "Epoch 11: Loss = 0.02533072\n",
      "Validation: Loss = 0.02451262\n",
      "Epoch 12: Loss = 0.02521987\n",
      "Validation: Loss = 0.02439579\n",
      "Epoch 13: Loss = 0.02512224\n",
      "Validation: Loss = 0.02428751\n",
      "Epoch 14: Loss = 0.02503176\n",
      "Validation: Loss = 0.02418534\n",
      "Epoch 15: Loss = 0.02494356\n",
      "Validation: Loss = 0.02408728\n",
      "Epoch 16: Loss = 0.02485275\n",
      "Validation: Loss = 0.02398914\n",
      "Epoch 17: Loss = 0.02475290\n",
      "Validation: Loss = 0.02388369\n",
      "Epoch 18: Loss = 0.02462911\n",
      "Validation: Loss = 0.02371460\n",
      "Epoch 19: Loss = 0.02444478\n",
      "Validation: Loss = 0.02351092\n",
      "Epoch 20: Loss = 0.02425271\n",
      "Validation: Loss = 0.02324444\n",
      "Epoch 21: Loss = 0.02409454\n",
      "Validation: Loss = 0.02302145\n",
      "Epoch 22: Loss = 0.02397668\n",
      "Validation: Loss = 0.02284041\n",
      "Epoch 23: Loss = 0.02387815\n",
      "Validation: Loss = 0.02268707\n",
      "Epoch 24: Loss = 0.02379213\n",
      "Validation: Loss = 0.02255720\n",
      "Epoch 25: Loss = 0.02371617\n",
      "Validation: Loss = 0.02244589\n",
      "Epoch 26: Loss = 0.02364823\n",
      "Validation: Loss = 0.02234782\n",
      "Epoch 27: Loss = 0.02358657\n",
      "Validation: Loss = 0.02225997\n",
      "Epoch 28: Loss = 0.02352985\n",
      "Validation: Loss = 0.02218084\n",
      "Epoch 29: Loss = 0.02347729\n",
      "Validation: Loss = 0.02210941\n",
      "Epoch 30: Loss = 0.02342792\n",
      "Validation: Loss = 0.02204445\n",
      "\n",
      "\n",
      "\n",
      "Optimization ended.\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "input_size=13\n",
    "hidden_size=24\n",
    "num_layers=2\n",
    "lstm=LSTM(input_size,hidden_size)\n",
    "\n",
    "learning_rate=0.001\n",
    "max_grad_norm=5\n",
    "loss_fn = nn.MSELoss()\n",
    "optimizer = optim.Adam(lstm.parameters(), lr=learning_rate,weight_decay=0.00001)\n",
    "\n",
    "batch_size = 8\n",
    "num_epochs = 30 #3\n",
    "# num_sequences = x_train_set.size(0)\n",
    "# num_batches = num_sequences //batch_size\n",
    "\n",
    "checkpoint_freq = 10\n",
    "path = './'\n",
    "\n",
    "train_losses=[]\n",
    "valid_losses=[]\n",
    "\n",
    "print(\"Training model for {} epoch\".format(num_epochs))\n",
    "for epoch in range(num_epochs):\n",
    "#     total_loss = 0\n",
    "\n",
    "    # Shuffle input and target sequences.\n",
    "    idx = torch.randperm(x_train_set.size(0))\n",
    "    x = x_train_set[idx]\n",
    "    y = y_train_set[idx]\n",
    "    \n",
    "    train_loss,train_pm25=train(lstm,x_train_set,y_train_set,optimizer,batch_size,epoch)\n",
    "    valid_loss,valid_pm25=eval(lstm,x_valid_set,y_valid_set,optimizer,batch_size)\n",
    "    \n",
    "    train_losses.append(train_loss)\n",
    "    valid_losses.append(valid_loss)\n",
    "    \n",
    "    # Checkpoint\n",
    "    if epoch % checkpoint_freq ==0:\n",
    "        save_model(epoch, lstm, path)\n",
    "        \n",
    "# Last checkpoint\n",
    "save_model(num_epochs, lstm, path)\n",
    "    \n",
    "print(\"\\n\\n\\nOptimization ended.\\n\")\n",
    "\n",
    "plt.plot(train_losses, color=\"darkcyan\", label=\"train\")\n",
    "plt.plot(valid_losses, color=\"tomato\",label=\"validation\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_one_hour(model,x_valid_set,input_size,num_steps):\n",
    "    predictions=torch.zeros(num_steps)\n",
    "    for i, x in enumerate(x_valid_set):\n",
    "        hidden=model.init_hidden(1)\n",
    "        y_pred,_,_=model(x.contiguous().view(-1, 1, input_size),hidden)\n",
    "        predictions[i]=y_pred[:,-1]\n",
    "    return predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "one_step_predictions = predict_one_hour(lstm, x_valid_set, input_size, y_valid_set.size(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXm8JUV5N/6t7nPvnXtnhxkYtmFfFUFkU0SMEgUj6ptoFA3uwcQ1icur78+YiFF/b9SYXxSNBBXFLYqKqDj4goMICM7AAALDLMx6Z70zd9/POV2/P7qquvau7nPuzFze/n4+MPd0V1dVV1c99dT3eeopQilFhQoVKlR4ZiE62BWoUKFChQrtRyXcK1SoUOEZiEq4V6hQocIzEJVwr1ChQoVnICrhXqFChQrPQFTCvUKFChWegaiEe4UKFSo8A5Er3Akh3yCE7CWEPO64/yZCyGPsv/sJIee0v5oVKlSoUKEIQjT3mwBc4bm/GcBllNLnAPgUgBvaUK8KFSpUqNACankJKKX3EEJO8Ny/X/r5AIBjQwpesmQJPeEEZ7YVKlSoUMGChx56aB+ldGleulzhXhDvAPAr101CyLUArgWA5cuXY/Xq1W0uvkKFChWe2SCEbA1J1zaDKiHkT5AK9//pSkMpvYFSej6l9PylS3MnngoVKlSoUBJt0dwJIc8BcCOAKyml+9uRZ4UKFSpUKI+WNXdCyHIAPwFwDaV0fetVqlChQoUKrSJXcyeEfB/AiwEsIYT0AvgnAB0AQCn9TwCfAHA4gK8QQgCgQSk9f6YqXKFChQoV8hHiLXN1zv13Anhn22pUoUKFChVaRrVDtUKFChWegaiEe4UKFSo8A1EJ9wqto9EA7v01kCQHuyYVKlRgaPcmpgr/N2LFj4BbvwVEEfCCyw92bSpUqIBKc6/QDowMpv+OjRzcelSoUEGgEu4VWkfqAgtQenDrUaFCBYFKuFdoA8jBrkCFChU0VMK9QhtRae4VKhwqqIR7hdbBFfdKtleocMigEu4V2oBKuleocKihEu4VWgepOPcKFQ41VMK9KCYnKpc/FypvmQoVDhlUm5iK4iPXAOOjwI0rDnZNDh1UinuFCoccKs29KMZHD3YNDl1UinuFCocMKuFeoQ2oVPcKFQ41VMK9QhtxiKruv/oRcP11B7sWFSocUFSce4XWcaiHH/jx1w92DSpUOOCoNPcKbUBFy1SocKihEu4V2ohDRHPfsh5Imge7FhUqHFRUwr1C65jJDarfvR74zW3h6bduAP7l/cAvfzADlalQYfagEu5FMDl+sGtwaGImOfeVPwe+95Xw9Pv2pP/+7ObwZz74RuCunxWrV4UKhzgq4V4E1TFyDhxCnHt9uvgzQ/3A97/a/rpUyEffLmDb0we7Fs9I5Ap3Qsg3CCF7CSGPO+4TQsh/EEI2EkIeI4Sc1/5qVjhkMTUJUD7pHQKce6ORn2bPDuAX3zt0vXv+b8LH3gZc956DXYtnJEJcIW8C8GUA33bcvxLAqey/iwB8lf07e9G3C+joBBYdfrBrcmijUQfe85rs96EgLBv1/DT/9jFg/17g0iuBhYtnvk4VKhwE5GrulNJ7APR7krwawLdpigcALCKEHNWuCrqwb7wY/00pxc7RUVBK0UgSDExOYqJeB7UJpI+9DfjQmzDdbGLDwADW9/dj69AQpkK0QgsSSjFRz4QOpRSbBwcx3VQ9OiilGK/Xg95Nfh8XRqenMTQ1ZVxvsvcvgmaSmO+v/Z5i7dWw0FcJpXh6cBDNJCn87QCgf2IiN83+iQnsHRkWv/VytgwNYbLRAJ1OqZttI8PKN0goxcDkJBpJgh0jI8H1nKjXsWt0FFuHhrBhYMD4rkXQSBLsGRsDlfrM3rEx7B4bw/DUFNb396MhteG24WEMTk5ix8iI8n0m6nV3/5bA+5Fc/vr+flEHHQml2DEyIu41kgTbh4cxPDWFkel8SmyQta+ODQMD2DAwgKaD+hyemsKGgQFsGhx0fpf+iQms7+/HeN0+wee1R//EhDJOp5tN9DnKmmo00Dc+ji1DQ0qe4/U69oyNGenrzSbqLfSLMmjHJqZjAGyXfveya7vakLcVd2/bhj/54Q/xrSuvxJuf9aygZ25+8km85Ve/wjde/nL8Zvt2fOfJJwEA//yCF+CfXvAC6zNvW7EC31u7Vvw+Z243HilR34/ecw8+t2oVxj/wAXR3dOALq1fjw7/9LY6dPx/b3/Uuke6rjzyC99x1FwCg913vwjHz5zvz/O7atbjm9tvx9Ze/HG8/+2xrmjO+8Q0MTk1h9AMfUK6/fcUKfPvJJzH193+PzjgOeodX/uQnWLFlC+iHPiSubR0awvFSmk8/8AA+tXEv3vvc5+JLL32p8vw777gD33z8cSzo7MTw9DR+/KpX4c9PO81bZr3ZRAf7+/Drr/fWd7LRwPE33IC/3b0Bn2PXjrvhBvS9+92Yx36f+F//BQDYPT6OIwFc8J3vYG+tS5BJH/jNb/DlNWtwyqJF2DiYHvo98v73Y15np7eeL/zBD/Dwnj3KNbmdiuDqX/wCt6xfj/ecey6uf+QRPP7Wt+LZN91kTfuvL3oRPnLPPeL3nx5/PH79utdh99gYjvpqakP4+MUX41MvfKGzvC/8/n588bcr8c2r/wovO+EEvO+uu/Cfjz4KALjukkvwj89/vpL+L2+7DT/esAEfvfBCfPZFL8LbVqwQY2lpdzf2vsdNsSSUYvGXv4zXn346fnDVVfjVpk24kt378L9/Fj+bfwQ+fMEF+NfLLjOeveA738H6gQHx+0dXXYXXnn66+D3ZaODw668Xv/X2H5mexoL/+A9ne0yx588/8kisuuYaAMD/uPVW3L55M/a++91Y2tOjpH/5Lbfgt729AICvXH45/vbccwEA5998M9b292Prtddi+YIFIv3h11+PiBAMvu99zvZpN9phULVZ06zTIyHkWkLIakLI6r6+vtIFrmMf+b4dO4Kf2TI0BADYPDQkOiMA5W8dfePj6Kll89+W4WFnWh++/sc/AgDGmWb1i6dTA1LviBo6+Efr14u/9+do1vx9NrF/bdgxOooxixbzbfbOkwVWIiu2bDGuDYybGgoA7LVoO998PDXZDDPt7uG9e3PLbGpa1pRH85loNDBWr+PCpUvFtcl63fr+Lly/Zg0ACMEOAKMBz+uCvRXcwvrA9Y+kasTa/fudaddobXgvGw/bhofRlTQRUYpvP/GEt7xLV3wPO56+F/vYt5Q11a8xIS/jxxs2AEiVJQB4TBrHfTmrK66x//e6dQDUfnLrjsfw7Njed3jaPz0+UyX0/jOR05f5yu9bjvaYZH1rtfQtb9+8GQAwaFn9csEOqG22tj8lOfq18TviWEXPJNoh3HsBHCf9PhbATltCSukNlNLzKaXnL5UGYVHw2SQpwvFSivMnhgrzwl1xjLcN7kB30mzZJ4Qv34jjcAsCYE7SxE96H0W8b3eLpeWj3qr3j/Y8AXDb9kfw5V9/K/fRkI6nt5JryS5jec8c8XcM6jXxPndSnVxtaQv1sRlGV9JETBMQSvHSsf3OvhwRgsn1K/GTHaZw1nHBzk3pH4mZl6ufAuVM5zoloufxpd4/OtubAjjz8MwGFml1y6OffO+S93xeHzhU+007hPttAN7MvGYuBjBEKZ0xSgbI/1A2nLllLVZtXYXnbLI6/TjxotH9+Mbutfji3vWlhbteX1c+hBBcMbYf/2O0D0ff/v2SpYXDxn0WAjWfv2psH5ZO5IdF1gdnCEIGTCxp9389aNUxBFb0PoJj6/4VUp7QkBFRCvrUnbiub2Zc+ybXr8TKbQ/jXYM7cOf2Nbh4p70c3rKvHt2XO1aSknsUyggv/Qm9bc8ZG3Dmm1Cq9JmygqtIrSNK0ZM0c9/Vdn9WCHdCyPcB/B7A6YSQXkLIOwghf0MI+RuW5HYAmwBsBPBfAN49Y7XldWL/Fmm+w4fT5e0Rg+F0EAUwj6bC4uj6FEiLrn55T8vDMC9tkZq4BFSrwp3omnuBDh0yQeu56TSNkpbdk4X7m4d2Wd9dvrIw8S/ni7RzF5vs/nH/5rZ5Dum5XDoxiOVsQjpydNB8AOUmTl5fuTxfLkUmPdczeg4dSeIUikdPjePKx34n6hlHqugqMrasdbNc+97OxzG2fmW+5m7rY4eAcM81qFJKr865TwEcUEdVLhiKzI4JSTtDEQEEAAnrFjEoSMnvpXesxdOToE/dibcvO9P9UGA9Q4ZxQiliy4Bvu3Av8GyIANIHSJDmnjSAeQuxY9ESNPfva9nzPrSP/eXwbvz3TmlVSOmMnS07zfKNk6bS6PxPeeLMq0FCSCrZCsbi4a1S5A0NzV373UkT5wT+rW1rcNHEEM4+4SL8cc78wrRMbt0sz79+JOXfkxw+30rLtFSb9mBW7lAtM2Qo6wxRwU7QJJJwL1GuUgdW9jHjqWH2HUMqbUBItjbws8XF4BowjVYHhCYQ2i3cdfg0d4642QRqNSRRhFpA+k4LtSQjVGh8fP9m/cGg58rgeKa517T25yUWaVtOyxRVesoIU32i1H/XqFtz72bfiQssQ7gH1qFMvZeu9IemeCZz7gccgpYppbmHz6mUZiL25WP9OKZRztrtopH0IajQMjmvFiVNPLT5QZzEDWIeuAyRrfrd6pp7EQRp7tpvn0GVp02FeweSKEYHpbl95HdbV3vvlx6k7aJlLPm8dTg1aenCnaPYoFY5d7k03xvIX+KW3kfxqpF876c8zj2Cu72zlUL6l01zf3zT79G//u7ceoTUTUZHv5/KtdX5UKBlZqdwL0PLMI4ukgTEx/ZtxosG/LZfPikAwCNbHixSTQGDX2Y/dZpHSZfzbgtGh3He1Ahec/8vnWmuGdqJX2972NB4OUVzMGiZvx3YjuH1K0utgkK+d5Q0mOYeoyNAn5srTfYvHjP36pUfojM/uGtN+8qpiOZORV80+8I5Fo+2IxtT+ObOJ9DZzKiKvxjtw892PJZfVg7nDri/8TmaZ5MuuCiAZ02PYbHDhpJYJq9glODcDwXNfVaexNQyLcMy+My+p4F9fs+GpI28aUa5uF0h9bTOvAKW09/elfoiD+nL3yhCs9lsmZYxXSHz8/vKntTHOUSr0AdNMC0T10AZLSM/ccr0ODZ29jhruXL7wyBnXK5cCxmkSxrTOHtK8/k/AINbfruepIlldVOw5XvLsC9hmehfdOyxxrV/27sebxzeg/sHj2SVCH/PPM0dAOKGf5fr7dsfwdGnvsgwqMpY2NVlXEsoxX/tehJrFx1hr5vXWJ9D3VmuHQrCfVZr7kWarwwtA2SceysIzaGIcBcrkYBOpNMZ7dLcba6QoeiZLhb+ACjgCtnBaRm1fn8eQB3oCOljv+i17Fs+EMJdKuL+ravw9Lq70+tF8rBlxmBrb77a5He6ChhiQzT3r9/1XW8eRzVT4e/j3G30XQLgnUM78YWtJfaYz1LNfXYKd/ZvkQYsY1ClUGmZVqF3gtOm1d14spaVx9nx7hvCe+udPTqItAzHa3+Zv9FJboHP71mPZNpt8xCukEkDiO2ce3eAILpoYghXjO4z8vXhxLplZ+YMuUK67p0zle0tKDMuBOcuPWsV7uzfJrv1qfUPhJel/7bkv7AeZtfSvb/kvJ5nodd+tclvm/K2WM44sXLu3icODGancC+zAaak5p64ihq2+xjboNsIOL1weKJubZ83PYlbA7hLoNhk1dQiJUYlVj7WOmhld+TU5Y1DmX1j2T7/BiNArd8HB7Zh/urf5j4TMc2dxjFqms/RXJrgtcN7hPZnwwNbV+FXkiZ+sA2qPiTs7ZZoVIZccq4rJE9hmfh8wp1z9Zf2539HUa8AzT0UPs397k2mbexDv/X3He8kXtEyBw5lNjEJYVhQW6UuzX19mBBW8hL/2mt+6e7NWdq8zsFuh0xWiRYfpYxB2gadY3/TsDtkQnethu/u8sc5yYNlh7yBWrMBxDUkJDImmzOnxvCjnX8sVObBMqiePzEE+tSdWLrdbRPi7fHR/Vu068U1d9l284l9m3DXtoccwp0qZY/H4WY7Pb9WPEqK+rm31NdzOl5Fy7QRhBAc1pxGUkBQF+GoOSilmWZj1iI4Hzk/wGNQlZ1lcoSDcAkL0dwdXhXtdtfy0R76MroRuaNRbh4cBPn85/H5VauU64nHiMbfJEpSzX3h4D4c2ZxGbedWkWZZs7gra+lBGjITeXD5eEotLNvsDmzHe3+9hQ09XLifuD5drVAAn9y3CS8ZH7D2QEHLsH+nPd/RKEv7HTp6be9jeARN+oOWlYkPk9209+saTXBL76NYOmQGdzv4on2WCveekUHs33APXrX+oeBneCc+JoAOUNBGg2qeO5ZSUmDvCNLctWV7uzR3fdAd5tnKr5fV9IQa/veHHwYAXPf736vPBAgS7i1zdO9GAMDcNfeLe0fkeGLYUH4CnPnhfcxYqt2/eDwLhVtvNgspPbyWF95rutTa+gdXJspYawxaJrBtrfXQ4zWNq/GM8jZMFYKjPV8/vAd/MdqHj/7iRvORSnMvh+7x1Of1IkfgJBsmuroBFDeQOlOXEPr8c7s/vGRQzcmLL6NDNHd9+3SpqJotQh8eZfb7+iYEjrjZAGod4jcFUGffvLPMrsqANNY3aVFzD8FZQ6n3z8WTWSjqO7ZsUYRmsCuk7Z6lvfjegfMn0lDT8sr2MI8tA7AYVL2p/ekMWkZb1TW1Pp9XVhmDqm8HdCXcS4LG6eB17dCzPlMyeMCzx8MNpy6EasqqK2RY5wjT3DXhzusTVIIHRTaRaWl9/vmuL5UEaO5RkmruMlYedgyA/FADNhwKmjt96k58afdTxvWmRTCP1evFNHfPsLD111cxT6J/2LfZeH7/hnuM9EpZ2u8o8DBzvR7nTg4bfUS3jTULxsrxV8BsT0IprhnOHAT+YeVK5XyEQ2GH6qzcxNRkB2jIu+RmAiRJ8K9b1rQtP6G5OwuUXSHzMsvX3JsAYgCJ5i1ThnM/dXoM7+/fnnZ0D/ftgikoinf+ac8Ezd8lShKgJndrKiZKH23kQogGZq1Vmwf3ewd7jWu2EwZS24akuefkqys9ea6QOtw2KUtZJdtEf+53Wx/C9/FaNY32TLPRBMy9TOXqZrn3zqEdeKlEh33xoYdw/IIFOHNqFIubjSpwWFlw/ryjnbOzBf/82Er3zQK0jEGDWDrLfTt24FHldJlAC71XuDOXR01zj0pw7j/tfSwVMLu2yZUIft7Q3D1pXVRCPWgTk0rLtIrSIvoAaG62DXZxFBXU3N1fot3UgjG9l+Tca8j2L/SOjOD6NWvQ1F5D19zzAqMVpWWOsfjjNynFk5sfwH3bVle0TFnwZusoEPiqTCz2S/u25ScKxGHNaa9AfuH31cM5cj0hAyiGBhfizZnh3IM5U0rNskqUXQ+YzHVahqJcuArx/CHs524T7hEhoBLf35PTZr7wGmduW5dbh4kCrpCUUsxJmpjP+mNo2+qp5LH89ytX4r133YWn9qsbl3QPsTigt763fxvWbrrfuG6jPufkjL9KuJcEEf8exAYsoLn/Wf8O7N9wD+ZsYYMl4MPncu7stu8D8sGv0zJaFuVRYHCeOq3GXinDuTcssVPkMl49shed9WmDc28FZQcpbTW0A8/Hc69h4dwjUGXi/84Td5cub/Go+3xejtWLjgzOO6EUGzbdj+ENrE6h/UdLF9GsnvzQbH3i1xWavPDPlFJ8ae96nDFtOcO1hHCf11fQK28GMOuEeyNJ8NkH0i3PZYV7Z5Lg3QPb21ktL54/mvrBdu7YAiBwl2zuq4XwoSylRstcMrof9Kk7MXePyePOBBJK8YZh9yHSn/vDH7Am4JDpvBDFYndvTRXuLWnupZ9rbeoUEUN9tJtFwThxzX2KMDx7bMBII0Pn3OVJt+ZQClzp80ABHCuHzQ6lZbTfkaVtE807afeo6hoZorm7K2A+myfcz155a/ny2oRZJ9xv37RJnJBe9mSkj+/fjOv35C85/SjCuacVFdUNqHe+PTU/E8G5a0LxFYOplX/xlpw2mJoEHrrXV4vcOgCpcNc1J1kofOSee3DezTdn9xz5NEIN6JJwL7s6jijF0fXJ0pp7Ed7bC88KsWG51zO4D0kLAd3O2bdD/P1nj/q9X4CCJzEZvudh9dSfi6VrhFIcU59EU8vrQ7/5jfL7daec4i/Dc88Wv2mOzYPGUeeEUnxw/1Y8uOUP3jq0G7NOuDcpbZmOOayZr5G0E5FGtYfUPzT8gA9cs6OaBpZNMjmZfPd64Kv/AmzdULoOABPuBb6Zy6Cq86hOxJJBtaTa/um+jdjx9L2ojeS7wtqUjFaFu3Ax9HyjhmX4kqTZEiUUFZwYDM29z30+QtlR65tgX71nE3qfvheLd21VrusG1ZOKjHm9/QJpGWe/TRJ8vm8DLpT2IxwIzEpXSFJASFqfb0slij+SHYwQUu884R4QDdKhuXNtMHcC4bzh1GRLbZZQitjwlvGXfdHEkLEc9wl3JTeZlqEopb5fOZZSafFouQHZivYMhK1KbZo7SZKC4QfU30VrbfRlz+Yto16Bk5AtR37tOSPpd1qkUYwnj6mT8tt//wt/GXLdNHdfu0E13JnjYBlXZ53mDkhytUCbFT0jskAtcPF3v4t/vFeiLygFtm+SUjJahg3GrgA/8bzahnQYobk3Hbv18gQQH6gOjSTEYyfNxqRlfC/YPTmOB7auwh+2arFlQl1fA3ay5kGE0C2pBbfLoOrDqGWyK6q565NI8cNptAw6O4NSJu+8MtxbxpKOX5tiG9v0DVFffUylZRZMWQyljroZ48JGy9g0d0v9gLBDZmYCs1q4l9Xc29HUssHswV278C8PSHGtf7cC+OS7gcfT8zl5I/NvfPrCBW2oYwjnzlIahrFAzZ134BKblmQklOIoLWiX79stGTbjcQN+qqPjaSnAlhJ+oMWvHTCB2d6lbbRMQZAkKTQh6XUvGp7DUJo8k4OcMgLFqVvD7F4+RcYl3M2yCzSoHmjPUn53bhvPEuFOCLmCELKOELKREPJRy/3lhJCVhJA1hJDHCCGvaH9VpfJYw7WFXikJb2fp3Zz+uyc1Tukhiv/HI/lxyXMFb0Dskkxz19zEtAMa3GWwDuwY8KEG7YRSvFHzlvF1vN/t2GG97qNlOjdKwl3T3FvylikppBNKcdvGjfhjn/9wZRf0E4+Cn0uaWHDvr0qVCbTn5DEXdCH9qt/9LOg5Hy0zyYR7XPdz6muPMI8MVPLTaRkJNoPqQmm3c2+ty1lPwH+w+0wiV7gTQmIA1wO4EsBZAK4mhJylJfs4gB9SSp8L4A0AvtLuiip14n8cxI0CXo1Q98vVvGWOGdrnTJt7XZSfjwZrqd3DDn/lvE4nLMB2Pdtbh4Lb2GVs19zYODqm/GFdMxDH38VRVrjTJMGrb70Vz/nWt1oq3wfbm5FmE7VB+8onBEVjMBlaredbl90QZus/c5kPvvAYzRkRmxan/vi7uucHFJhvUD3cYqCV30+u8qGsuV8IYCOldBOldBrADwC8WktDAXCuYSGAGfXgJ9q/BwOFPhfXwphWtHWxdEgv+/DH1Cfx8rEsLvTg/EU5eQYYVFl5dX3JGnoSE800dwfrHlS/hFIMRnbbvW3A39b7qDXtKx68w12eDImbb5mWKau5HwBaxhXTxhf3Pg/Ok8dcdSgi3EvUx/Xca2/R9MeATUq+Oqice9p/NnWkkWR3H3uykV7m3Kn2r/73Iau5AzgGgLzjp5ddk/HPAP6KENIL4HYA72tL7XJQpB+226CaRRLI8h2dZkJUW9pG7Od31q7FyPQ0Hj7mVCOjH+94DH8+mi3h623YZcmDOkU6LYMwWmaMv08ZYSGvcilFl2MystXgSEfo2HVHnRhYtp5r+W9PSgana1W4h1BeF1hd6yiaLdlIWjSoWrBi82a87667/Jr7y/7Cecumuc8bS989NJRGoT0x7NvtyKFbZDxvYhiRY9PXwQoiFtILbF9bf9+rAdxEKT0WwCsA3EyISdQSQq4lhKwmhKzuK8lFApIrZEmB3Q6N3zZbr97NjpkzNuyk/24aGmKnC0n3WdqL9IGax6kHecvw8rXuJWS7v9ttGmDLexcP66uDrLmjXLhdHX3zFrqLk38867yWyxL5BvjW21qnrCtkB02wrFH8xCil7AJGUaPuBcdUyHkCr73tNnx5zRoMT3uMni/+M+ctSin2xvZgcFRK44X4HvZ0Ns5dkJE5eR/XmMLqrX/AZb9fYb1/KLtC9gI4Tvp9LEza5R0AfggAlNLfA5gDYImeEaX0Bkrp+ZTS85cuXVquxpANqgePc+ddRf5weQcjUJA0vboGdCTOOZQ3oMM0HJq7iH2dkwfffFVOc1c5d5dzYiGf7NADMA4Pj3eSX2hJj6ySh3XctOsJ7Nr4O+sW+7CCy7gzZiiqMIWkH2PGTq+Q87ivUqSCamyuyZe7wlc/ctpzC9VTuSuEO3s2cBW2pD9zGlD590NXuK8CcCoh5ERCSCdSg+ltWpptAF4KAISQM5EK9/KqeQ5a5dzb0dSCw6MUbxrahVeO9DnroxtUFYHh+PB5HSIo/IDjUHBrPSzIjcfhez5ROfe+HM0rBAPjY4X5S0rLh6kAAFoyrHRZWuaV7DCM+SXLpQQYmpvvautCYYXJYMDcz3sNix4aMqEUhAJbTnkOknmud1PzntbiC/F6BfUF/dtZD+swH5vu6JTum5z8gUaucKeUNgC8F8AdANYi9Yp5ghByHSHkVSzZBwH8NSHkUQDfB/BWOoPTVZlNTO2GbKD5zq4n8PMdj2KetgWaQ2gXtoqX9JYJ0SiF5q4LisAdqkJzd01AuTVIkVC3D0aRbtI3Po63rbAvfVs2nLoQ5OdueYwmeMlYP1450scvKIbevLzOm0yPkizzVkM9BYS7QSEW1NxN6e5M652YFx2O0c5u6y1KKSJQEEIQOXYMGwulxPVeAX1Z09xD+gAA1CUFRtb2D5bmHmS1o5TejtRQKl/7hPT3kwAuaW/V3DgUaBnOV8sfbuGW9cA3/jfgOvkoe1jOyJp/7iAL6DD87NDYuUM1UHMv0zllzWViHIs117F1C5bgdBQTXjGluPnJJ/HtV8zoNgoVrncfGQSGBoAVS1DZAAAgAElEQVRj7UbeJElw1/aHswtf+RSw5n7gRvvkxME19j8dL+nOSBEsjGyQ6aDNC5cg34Qd/gXzuOdVJ56F5214FPrUlDDh7l2ra3kbArVQH+byJUUoLSN7OM0Kzf1QBG/DIpVv90TAOVU5V5I0VcHONORMuFu8VJyae4uudJQKu0DntGqgo0Jz95dhHUqBfC5tZnmT0WGDc9/fZdfSfCjDQ1O0FmjO6ef+yfcA//y37uf077rGPATChp/MS21Rj3fODUpvLbuFw7llumFfgE94pBdVlpYBAEKs34qLddupUeezQ8JzhTnv686Fsjkms5Vr8Rg4RPoGhzLnfsjhYPq3c/BBr3w4l2eF18e2nOYe0mF4O3XpR4KJHar+53M1fI9GI9MkZviD7P2KdPwY/IzQAwhX/Qb3268zlPWQmNI9XQpn09pkpvS7EEqqwHvmuisSYk4WYAZVisynWMIFXLhr76z/LrLaF32Se5uFTpZSskpzL4lWDGSk8B48OwQtI+etnwaTqMs7K1wdJ9e6n3c/K7ezMW3cCynD8kQwZIMiPwnqncvOFNeId8KzI6LlmPVWBlfuDlXH/fYFDiuxWmmhbFkohYwzXVj6Vg0vu+WWnMwie5wezrl7RtKWQXUXtiGQhTaer2LxvzNaRh3X0w4lTpUFB59zn53CvcxwLfHIPUuOc96jNs1T47Yn2AlIiUbPqNpOOeGe78hCMxpD7+hCcw9cbsrPB3ZUJYIja4eBjjlZFaR6hiKG5SzWALQymesD20B92iGQWtzEVPK5VASWFyayQAg5MczU3M2yazTBcfVJdybXvJ9lRqwCKe3L8Lrkmu1tN6i6VhpWWkY8q+bdN+6PMKk/U2nuBfDr7WtKP1tk0drX1ePOh3UA+bO7DS9cuAsSL7vl0HRyaxngt2ufTBzcvyOP9N/iE5DMuXNahkruaaU0dwCXH398gSdaH1i5/PWUKrQef/7LAQBJgcPb2wpKC02Y+iTCv0sDJIhyMTR3S5ov7VmHbU/fi4WuAzNEgDr7xJR6W1GvvcecY+zCPcRuw1flgsqxuBLnRVuS264S7gWwOCm3JRxon2HV5i2Tp+f8Xf92zB8b1jpeSc094D2yJahdc9eFQP/EhFUrUZb5gZy3okkx4Z5IvsxlvkNMKS49Ro98werozK5FEs6lvfJNN9OZcN91xHEYPOp4Vp82DekyK5UCBlVDuLPv0oiiMOGusx+Wsl82lnr+2IJtsYfSf6PIy7lT785bO8cu7hahZfThogt3Rx7yqyuae0XLhKEsn9h+bxmTc3ex+dxF6rypEVy9UuMdS7pCLpgY89dP9i3XB6Cj7MOvvx5HfMUM6OnunB7NXeYcGS1DJeHOB1mRjh+VomVoa3GFXP2tI407Ip9SRQkBYdRBqwO6pTDFLVBCvK2aFi3a9k4h42qCCeVuV704ZQLH4dfCz91dRp63DH+vxY1pYMPjOTXO6pM+69gEaDwlae6yt0xOaTOF2SfcWxw07TGnpu59gFYfR9by5a76tNrxSgr3ax/4pfc+hcQZ6oM0NJ47T19iE5MihJktIrJsMS/yNWNa3Aul5YHlEkidTLjLbqYEIgRFq5x7WVAU82DRU/JJN7HQMk3LgRgm5WeWPcEmvDOmHAqJ8E5Jo4/q/U0oKh7NPe+NFZrkCx+zVEG6zzcxsUuJvk/Eydtnf0eHgOY+685QbdULoV0afDQ8AEDtVIlDusvXkyhqi3DvyolWSKlkXTDWmWGxZfhdp0D1PK5o7swo2ZDaQebcv7ZrLfbW7OEJZMSgBz7Cnuvd+XFyGucuNHdJc9s2PIzlcn6F3DlL9NdWOHf2b9NCyzSbTUNghAQem2T97Zadf7RXghutmUG1Sani8ioMql7O3a6p2343AOT3tqy48Sltn4i7EtmzSWVQLYxLjz6q5TyCh5bPYGihFYzUXEGWCjTCsVLzQON1nT2luFYdGX/pEs6h3jLFRarsCsmNqy876SSpbln7XTu0Ax/fvyU3zxgl/MdpixSHi79mJwCpbUiE5i632U758JHANhfn7gbWc2st9URavLcXc6ZbiSqZ0TI6P20LH2Bo7pbv41J6BFi0SD4x6nF5EsngGgwPTdOw1MfWzmKfiFaueyUrCfdDQHOfdcL9yO7iOxtnBBZvD2MHneWbJiQyOp6ejFjSFK4eJGu/Xp5gZfI09xz6xjf5KX6+6d89nsOTQ7CkWS/lCtlKS+a6A+oaItNSnfWcoYMbXrI8DXO8YKAPVz1yd+l8BBVBLLSM7UDuduilHUyPZuOnqbmf8hIsUcSlRDmau1RPW9RMKy3DfuuTnNMnTkoXVZp7CZTlMqn1z/LVYP8qg9gpeFRaRhkQlBoaUUJaHzRiKStXlv8seAhyGf5YNurxwRJLnHtkmRzzcN7kME7t3VisHoVSW57PFe7qyoBEpuauCPSCk1Pohr3e2pz8RCHlgXPu5oYiq3DX+5Ylz9xXeCk/2I3ZK7TVktgzYdmh+kT3QlZGTimy8M4Nzc2VIlasxVvGHixO1typ9fqBxOwT7i3EzQCKGVR9Ka20jKHFsYEuXUs1dyUjQ8uzGbPKIPOW0bUY9m+OFinoJJrv16tDGaBscBJJuAvaoeB7Lt+73Xrd3H4u8fuFStBQ4JR7QNbc5Z2eDkHvQdE6Fz0eT8BBX9g0d1sYY8O7pUy/ZfYWYYzWN45xzzSLUO5jXkuxVGxvxxwv527Lhzp/qMZRy23pRnZnYN4i6XKIAth+zELh3rpBtS3+MhbN03V2pZlG/di2JXyrwl2hZQwfYJ4mrAyX5u57Wo6DLjT3SPKWofl52NAsuOoAaGsDytXfXIZwC29MZI03mHMvhlxeu2h+FuHekIz4W11hhS3vF9z6ou3sPL6PluGTzKOveTsaJMLztj2lhFgmilbtr4a+iSkOsCuwG+LP7Uuz/Ri0hZVbK5h9wr0kLdNOP/cmJM1dut7ocHDKsuWfEO2hhqm5E9I6506pMx57VFCyUkqtU6JvArJxmLIrZFRSc2+GCrFi3p7ubPIyoFQRFpHQPmXhLnk2FVZOwl6g7GuaO1TTfxOLn7usUU+xiVrno231CJ12iItzlwyqXOt+4uSzWd5UrQeJcMI024h376+lOlDr36KMAjSK665Sa2f4gUq4u9EGP/fwHOwpExAMM/coSqnYpBEuqLJ0Q//7g0oo1B1Lj0FIfJA8TS3V3FPoKTMuPli6h6WTH7FwzpGkuZcJPwCUox9a0mkdysQQ8/BQ7SVUaO7y9UgR7geHfw0F73dNEpneMsoKhKU3aJ0WCo/sxuhMc7cpGOm/vGfJKfb175PS2flwH6zhQuAe5/JVF+e+d9S/+bCdmH3CveTxYxyFaBlHH0gIMMl3XSrp8z86qJpu4fCA0pmTKEq57pwO+JuTnu29D2Tasek54K+vXFXA7fnhm8wSxaCafrPYwrkXRajmTiXyqSU43nEvC9MwPDWluLpGwhVSogQaknCnYf2XC63QefVvzjknLKFRkP1yYnGFVFYjgvJTYesToV8gEgZVl+aeiauMN09zFwewSxPAVx55RK5YVk5eHXMa3Tke1EqLP+Xx9+utW7x5txOzT7iX1dzbqDAlyGiTMGMJ8fzSDFU0zKA6yiIsTkb2g4Vlzd1pUA2luJLEKoy9AlrZxJTRMm9bdhbGSCQJL+p8zoYOV3wSs3KsgLDkTjjqI2cv0zKcF5ZXY61o7qGT4IcuvLBQvgJa9sJbhlg2MYUYVFtpcOFppGnK0iYnvRR+ZS432js8YZRNTDk7pcVKwUWt2y+rDgqK5q6O7wOF2Sfc2+AnHNq+roGlLsTlH44ZXepvxGLgkyMIEtA0RkmOcA8JYeoKHFb0oIwgTUV/RvpOd2/dCgAYbya4adHR+PXcw92bdH79Y29d/uyJB/KqW6CWIY/nc+4ybAZV5bCSwjajsJVKWerJ6ON80rVx7tIKhIBaXQJbcvvjE6OmuS//P2mfqEnnEughNC6bGOQVs2ctvUs9Zze0oO/5s3oTOVwhiUNbV1wkK87dgzbE7GjVryD9tEzDCdDcLUNA+dW0nHGaK9xzOonCuevamSPv/2ffJvSvv1v85l4Cc+/4kbsQV/ky9cQ2qTxr6VLxGJ94Xv/zn4t0P1q3Dthm92MfuOTl7sJga/o2eY/k9DclzANg3aGKeibcaWAoYBffa+D91wFv/oBTYy0MyRXSR8uAsoBeAcI8z6+cg1iM0QBwxKPpEYW1qUnkrYJd313u8/vnLzbrqLxHGF2pI3Jq7rKM8GbdVsxC4V6udcrMmK4naCbbNSt74MSjawKyRkQpGwz++vJB5Rs2EkPpqIda33/Zt0kJp9zF7ndufMJbFxtkzn3pnNQXecnc9FzQ1BMjxcrtmd/6v61eDdcbTZ54RuE6AGETpRc5tIzhiSQ8PsyQx2nygspJXtWfcyHwoiuL5ekBf6+ERMaXkDVqAmDP+LghQPI094e73Oey2uLysBsAeJ/nKz6i1FcklS48ezw7nYlQiq2d6e728SPsYaMFxA5V+wTrpGWoXbijwMTRTsw+4T5D27dtcAnOtItZaIUwyt1c7kqaOwXn3HMqJ3xxHbcljVIXbqGukLW8BL6BbPGWqbHDOhJLnXJRKxnjrkXvqtyzbPX0IuSv9P6Stm7bCGQtNyTRGecWSx9Urqy5q3VtaprprtHRwuWeNzXiKdxhUGWFWA/A8HyfP+/vzbIGBYlr2B91WJ8pIn5dE1gkTUryGJdXcZONBp7Yt++A7FqdfcK9DbRMW5rVqrkH0jK6q5fCZab/y1tpZB3dzYe7/NzF75wOVmvB80E5Q5UL95gLd4+rp8sgFhcU7gXDGjuRt4FL41+JRXOXJ++2ntD0d58yym0VostYDqt+sm+vkdagZVpob9F2eh7imMqMbBQC38jDLtL4ijhddVs2WlnqzRUsP6maIZI9oZR47tnf773rLjz7ppvwy02bHLm0D0HCnRByBSFkHSFkIyHko440f0kIeZIQ8gQh5HvtraaE0od12P8uA2r8n+UbsE3ZpglSg3PP38QUwnW63NWyVYE/jzivCE8dVJ6RrTK4Vouw+ssgnvMzreXLzxZ6UkOOd4vOp0aCWjAPK9Gvt4yAMMlA6q75d7/5jXDflWH0DfavEQMJanxwguwQDRmtaKRcMFNDc0+vE0qBxYerzwTv1QAAkjpD5C1Ic76ROPZPg6K5y0qfdP2k+gTeMbgD/ZOeM2XbhNwRQwiJAVwP4EoAZwG4mhBylpbmVAAfA3AJpfRZAP5uBuqaomTnKfOU0xMF2S7TTJeApW5sAjCiReq0TFO5F8ITZ94y9vvqSUxqIhddo9evwxL/LnT5qgwQ9n58h6rMuYeiFd4878kNF7wED57zwkLluupviwqZSJx7qOZeuH089z79wAP4/x5+GF979NH8fFi1re643Nia/lD7fhvAg64Z3llyW37k86x0F+fuNqhSwna55IRI4H+7VpdKUD4JCo3l4N/v2foQbty9VjGyzxRC1KELAWyklG6ilE4D+AGAV2tp/hrA9ZTSAQCglO7FTGGGXSGL7jKVue2Jwf7cp6ablr2liquUPSSpDiHcPbVzncSUS8twGsV2P9A4RC0dXQh3lBDWc92GOC9CvDniGAOLljhu5nnLqPcjyw5VxaYyQzYjHy3DaY56QNnCRTUyd6jyuqdxZ7jmrqKVTUzCW0abAAnX5Gs1kMOPwI5al1Ff+Q2seTMX41Rzz1PdtbGltwPsSpUs3BXOXfr78CQV6ieufchfhzYgRLgfA0AOxdfLrsk4DcBphJD7CCEPEEKusGVECLmWELKaELK6r6+vXI31wWY5+statiZAWwEFxAeXP/Tz1z2kpUtL6pA2GvVNjJuau2ZZD/Fz141dRh0Vg6p6L+u0rqBYLNBXC9YJX/gBeeIxBppDSNG587GjqwerjzzBfl+/IOWT970JpW7hGBDyVx5Eth2qMi1jRDzMRdg3cL1jIt2z7lcwFptMO7esriL2Hvx81YRSPGdq1Pq88lyoPYCYewQAAKzczs4u/QlTyLr83Nm4csVtUnzR2fnEPmcF21mvymSosJJmHzrtiQcdubcPIcLd9o76m9UAnArgxQCuBnAjIWSR8RClN1BKz6eUnr+U+TwXhs6B/u2ryuXjQMhQktPYtBcdnbVMuNcsBh8zOmN4yF+f4dV1EpMQ+i5NTmju5i1Vcfdp7tnfHWwC5lptIu0T+I8965x5KHUmBEO1Tji/kHskup9hiODRfHM5d3X3LrHER6GK5j4ztIwvJzHhFFgtJSRCrE1sh/Wl3icJ7/ENk1qwlTDfIpRt6JpMQzp09u1UrtdYPZbMmy/1HHuJLoNqJGgZ5Gru8//zX9Q8tfuKciIhThy0jK0+LYZRCUGIcO8FcJz0+1gAOy1pfkYprVNKNwNYh1TYtx8zsazd+GSh5LI5Rd/EYk+fgYCaJyO1cFiH6wPKfKiLO3VuumLL4lzN3SfcpXe6/KlVaV35sptkWs77BnuV53hALgDojzODYRRF1i3xWYHa7wLeIxF3UbIgJESD7FVi26Eq7+xMmgeWlklIdvRfSMmClrFo7k228np6/mIQSu1unS3YRo5dn9oElvzuV8p1TmSSLukUtoB9HjK4p42LlrHV2sm5O+4ptIxiUDXbibTTa8qBEOG+CsCphJATCSGdAN4A4DYtza0A/gQACCFLkNI0M+PrMxOukL+/s0QmGS1jj+6SlZTX3fWPT0M09zz/a8fSEciEEXFoD5wvnratMgJHk+CiLWVQEHvHoxS3b94sfsqtQuI4h65yG79yaRl4NPcAP3f5yUh4fNg1966V+tDJQfAKzo1CmjtLklg494yy4Qest3eiilncoKbmBfTL09IjBPHiV4AQooyqUIMqaDphLW9M4Tnr15i3Pa6QtrS6myig0jJKP7VRVQdgv06ucKeUNgC8F8AdANYC+CGl9AlCyHWEEM6J3AFgPyHkSQArAXyYUrp/RmrchkYxPr/kZqfGgbCDkuzjFTWQ2ZaFSgRBhHHuOgYnJ/Han/0M+ycmRDlOzV2MYHsZ3AD4W4nfXsbjeoRWi7eLvPWe35LqJLdeBKoY/eTOSUhk3VgjpQismONJh6tlyBmqVlrGwbnPWX1PYJ3Ka8BK9Yi0azbIfZY/FzndHLlWb+v7oQfA2BCzvpJown2yxs5JYKcuKSUYNht73gS00GrOKEdC4lAYYoeHjG1XskuxaieCnIcppbdTSk+jlJ5MKf00u/YJSult7G9KKf0HSulZlNKzKaU/mLEal132+Z5z8HQ+HVGmZZxFOovWLshClqYxXRZOTTjzNQui+PKaNfjxhg1sC38KrkkMT03iqf3ZXJtnUOWxbmQXTjksQViVuHDPaJa5HR34XxddhMXd3ZmRTxomp4/0QyYDFCN4FOVEy9SZ2PCB7JtISYCfu7xyIyyOjhIJslms7crApbHKq6SQw8UVWkZPrhx3R+1931pG2JjtPfcSAMDo0cdb62QrJ1Rzj6hfuNtpGXda26o4dmjutiYZXmDGt2k3Zt8O1aIzXn8f8PB9yiWjrSVvlvCpgw2CopMNpcagSTTN/ZLB3Vg6OQpMuTc66IdsCz5b9uIR+VOc+c1vZs/ygeFYdQgu1epV4IifYaRj9yThTgjBpy+9FIu7e4TWJ+fwjYd+pYw/he7IpWU0CBXUbG9LZd2bpApQDwQUZE4PAKA2PSWujx+ADStlaRnXEYyJRXMXqy0m+G1B0GyfJ8S1FwD2npnSL9NzHUf4iTOJZU8ow9hif5RSfwAzT9sYNrIAP3eVljH70J7Dj3LXpU2YfcK9qDD9f/8B+Mqn/DtUXUtyi6jftmgpo1Z4dcK1oQzq7/1j9tNZpifd2rtaLEUMii/tfgpLBvpEvcRhHY4B7BKU7dgiL5bs06ar6kSzgQgUU42GxQ5qd2FMDapu4e7W1AO+j2R0NO7l2ja0gTsnNfp1SMJ9ZYkDGsSE1IKBEki1bH3i9z/AlAObnzvlmjsLKmZVDswy+tnZA3kQO1T1/udx4TS+moeW8Qp3i9Loc4W0QT1rVfrbMp6ePOU57rq0CbNQuBfk3PtTYRf5lsYOzt0qFygXJAGcu5gA1Mu6Jjk6lQkCOXHdI2T1jnfY6BDeO9iLt678oZHmuVOj6JDarY9NJi4+uenR3BWEaO4NU7gfOXceCNJNNbqBVhXuMi0Ts3gnrvYO0+AclXUu2XM5ZO123NGJOogi3OW2L3o8e6ho901tRbxlhDmGEKdBntMyNm+ZVqYiEpuhG9QEvHypb4RR7mySdre9z3vFcIV01M9Fy0RSX+DYs/gIZ3ntwuwT7iUNqrGPzvHELembM1f5rZ3uFWRAkoXU4sY09B7ZsPgLAwj2iU5tRUS/pHTKU/mhwdJ1l69tpjmFcqqWZPw7WQZNHMeIaLoJxhR2ds2d5LlCOisi/udJQz0G1WITXEQIpglRDsXukNLsP/F0f34l4eXcCcEFE0P43P33Y1RbSfUuVHfmZpx7ZHqEJJrmHsi5h34zscktx2hOlSu6dM++49YjjlWeVDR3XY5YlD+uhB05MQLc8nVx3TXmYwctQywbLQ9EbNvZJ9xLLlPlDQZGDq4lufR/uXwq1cOnudtqesbkCGraM01LQCdA9Y82M7dz7jJdJC+r50gdj2tkLncsblDN5ao9QjMT7rZgVamRj1pykIWUXP8oipjmXoxzD/PeoLBFu2kCmHZodNkcbwr3OomUibNDSrPvpGcF1Ke474/Ps+ukqTH8Yesq/PvedXhg1y7l/v4ee1gHGlk0d4lzBxzKRwCv74Kwe+j9sgAtI/8ekRQzzrnfes6l6QVNoYos9i0l7xXSgTVFNXebcG+RbgvB7BPubdDcTc7dbVC1+XVT+f9eLxz+gJqmQ9NMGpIAVKzsXi8Lld8j2pKCa+7r56YbhTtlrYL9G+cYVK2sVGin5OlsRrco277u+5q65l7GRfS4B+9Cd94KiMKquccALtz0OHY8YfpFK89KiAjBoqSB03ZtEdc6KHU/MMOgIJg3nQqu8ydHDKFiehJKmrueQHaFpHbFxvZ2wbutueau5SuetxpUtTxc3jKMc0/4xjhN4NYmx41nfIHDbJBjMZ08uBcYSmNNxZVwD0TJjRORz0joWJJbOyo0gV8gGBNHpya0Gw4NnXo1d60MiztnBKDOBkwnzSYjXv2aoy05LZNPSXhusbz7x0bNm0xwUBst4/OWCdncZXn6vLGBnJSe2DIAyMpfOO8ZgcNYPkeOZEHkOgI9jPQ6FYHTIIysjfm5p958JM4dACZkGkcxqNJwWiav8gxZuGQt5K/IiChXbbvDZepFoW8oF+4scLGuuU9oTg0OX/a0fvZxI6/Q5jamgX/6mzTvusm52w4bbzdmoXC3dKhRx+ku0ozp5dxlykZeWvmlV/qPj5rQ/uXoaTawpmue+N3UDh4Wz4d6rUi0DFGEOEU95sI908Z5Gj12iKiP10gs1c9XJR5B8KffMm8yeiWh1LvjVfWWidmuyfYNii21zIvDFZMEcKxgHGltQbIWt+DnHh5jyI6OpIlEuPSZGqPLkypmG4kGJY8tIjj3lMSyGlRb4dz5aVu65q6XIf3rDIoHVcOPAIAQ0Jpdc491WiaxRG/l+YYqGKPDadkWg2qludvAPrxiCPqZRYAAiiDyCvclRzpvGZww1E4TRBNpmcxt1rE/7sS1y9JzQRuOwZ84DK1pPbRBaTGoRhSoR+mAkTV3/tFjRwfLNCfzPvX8Um+l95b0Pm2pfMq5J9QSMk26INsJCCFMqDjqrP/O8a3+xJKT8LnDj88eLkhyW5NT+4B6y7DEcxcc1K2KgEiivjIfr/wSF3en/vpWAR4xC0VoELTQCcp2uDhMBYrbvKyhJaRJWtfcAZLtftXiqcfTunBvupW7ggqGlXMvlEM5zD7hzhp2j3SCuW2ZtGt0FJ+4L9u8xA1cVi0sckSHcX1b+e+Afqt3klPHBjFFiNid2VQO65ASFjDWRhG3IKr0S4MtQ988tEs8J3PuD+/Zg7u2blXy+sZjj+HTDzyAqYZ/8PoMrn5bBBGCRk815TjEgG9iKnqCk7N+Stl+WsabT2KnZXzl7h4axIM/uNH7fQsbVLVy+XffNXeh2ADN7Rwu/GLV70H6dqc/OEUiBToTG89Iag630hMt0DLE5S1jqfK6/n7stJzh6nSFZJw7ZasDqgnc9bu0WIhJYo0fAwA7hz3nwAJoaLVYv2eXkabS3G04ajnwyquxT9oYsXfC3OzzrSeewOdXrTKuEwDzOtTYFful55XZPkAz9cbn5oPKks1gnJ1zJHvFLOzqxFRn+m7Up7lrhi7r4QGgaDJa5vUje4DxUeWIsBpN8Lybb8blP/qR8tyP163DTb/5NV45sMN8JYWW8VBSPu1GpmW0geCKRJn6uVuCWTmQJ2R7kgQvWb4cALCkuxvjvomsUITJnLSU4idf+gwuuvMWDN/9y4Acy9Eym049ByuWHAfQ1OsHgPBQcmX/yq99Eu9mUTr5yqep7Z5O70VpfwvVyINdIe3eMgRaEDlC0KQUn33wQXMXbZS1hNw/CWXvxCYQfUWySRfA1E3L7PNsLgSAhtYHdlrOrqi16cxbH2afcD/mBOA1b8GiI5aJSw1L/I/pZlP1tpA62OI5anxpryDSPrG0fSm0xtaU0fyFqPOzIZuZEO+KYtx1xRtz66XkSbMwwrLPTIRMg+O1l2kZ3SWTIwbFT3vzj2TzDm6fVkoyV0g9lYsqAqNlnMJduxznnLn6+qOPwGtPS33O58SxN6iW17Zg8XPPQ8d4amSm4xZjc0kYKw+S0YcyLROqMZLYIgTZOEsc9Algn/CtStJfvc+4JDh3o9+rSsBR8+aBgCIaH8UZ07qXi+RJo7smkig7yk9Tynr0c4ybblrGHQU2hS7c5zenMRF3YMPijP697oX2Yx3bidkn3Dk8Bjsb/cQAACAASURBVDAfKCwCRFGCA1lJlizMz93MczSuYZDx4XO1QS62YfuYDddvzf8+kYV7RBQjlLPzUopnT9tDIhTexGS7x7wtQjX3Paefy55zc+5FEdfrmUZOaXD8k9x8owhfWLw8KG2R71scmed+JtxNbxlnFSwHfQuhy2O9BxtUrdUzi+TfwPBztzxOgcOHzWMtlWxlX3PQtN4Od8tufZWcJG7hyJ59uGs+3nOkuSmtqb3c3MY0xjs6cftJ57hynBHMWuF+xN7e3DRqcC1+zdRY/Zq7C1y65wsbW+euk0gIstc+dJeSL9cufAJSX+q6zkltysKdUSFiE5Oj7r5OESpavekIQYxUECTaILdp7nKkwvBNTAHisQ3yXBdmBOkxdD6I9vW5X2YFBNXD9Pfm16kQymdPjeV6y4hiBX1h2afAJlkrLWcTxNaLZi8jYkIx66hcYS83zcbH40ceLye2VibV3KWDS7SxNUfX3JPEY1NKb3x90dH4yuLjjLv694+TBA0SCa+lA4VZK9yXb3kq++EM+iT9LTWs4U5nzgHZb+smJhKkuUsj1Lg1TSLc351uMNo1/zApc4rsLEk3DxxCywBAs1ZTHpI9DFyC8rJxv194EDztMoeFM6YT40bL2Ja8POwuJZGbtikIAgrwk326unM0d889XVgS4hXulGYaoZfu8dyzQadllP0Y8sEhoe1n09y5QTUqFjjMyrlbrsVMETFWF1Qdh4T91xSrU6nXyJOG7tZMiJAVupuxEfnRQ8uIdrDfNb5/RCloRMR7bT/jPMeT7cWsFe4hx58pPq/SxzM374QPpUyL4P/3PMsFrqUj1wnBPrZbbvd87bhZ1/JUqYdSEI7evgEA0MFjsVPe8TuUdCkXzycCe93fNqSfoihnEbghx/N9zno09WKau+pug5ap5Wju7qiQ5lMyttoCNV14GfAX7wBe8+bCrmk+ekj3lnDVLNzSUwLyZh7pW9h2Ytpw2N7UmF7btzvLUrhVsljvwefBhgn3LISGblDV0nJjLxPQVBLocrvJqxRCkQp+h0HVXPl6aBmWlJtcLz7+AuW2LtwJTdLTq7g8OADGVCA92HpWohWXuJreKZ1GOrvIKLpD1ZZ7nWR2fj2uulieeoWnYijAJXf/DAAwl+2G40vbpGbSMm9jbpEuV68FBQ/msFYvoF2SyGTYbZEIiaQxuiIV5mGiw3JIcxQDV74uzdsnTn2Ku7z0Z397RR7NBrfv+7qiHoZXkYirsiCLczw9OMYXHg4A6OhTffQTEJYttY4PnVIBHP2MP3vmuVk6R79X16SpNYGACk+eRHJllgUnrwsPf90kRDrA3BHiQDzr0dw1l4oHuxcqd5sa5cQP504S/U1mFrNWcw/By8ek04ekHZoj+kCX3fuMDqt9CioSOtLLSYktBwDANFsiJoDp1mg5ZLkoxMom1mgZKY1LUC7y7aiUH/G9e4hhOo4NzwKrK6S07b1o4DAZ3zj5uc7kvpb2lmgRZsvmOw6bYLnp1Jk/VRhMzp31PUoVBcSIc+Joz70nnQkAmO6ZJ6UVe11TJYflu++qa/DI8/4kS5c0gZEhqW5W6Z7+szQ7tMJ1qIjREozzF5q77BmlrFjYZMs9xKJI4vVzxpZnh2on23E6Etl1Y1Nzp6AV595e/GjnH41rBMDObn3wFWt0hXMPMcbaBhATugmIeSKS8JYJFDnUHED8VyR3fJooA8clKHsCXTC9rRYghBPL5jErLSNte3cLd+36osONFE0lbr9WF29NPRy6rRU8bpiUmnYRe4k0IJWU3nCFzHKQfdUX9Jl7F6z5cf5b65sJgeED31x2LHYsP4XVlgI/+Brw968HGAWkGCb/5JVGPTniKEICu2KgXBHsDesXEucuR/cUwj1JEFGqHMriDE7Gn202nSvbuePpJqY9/GxXDS7NPWZlRzluuu3CrBXu9Y6sYW1bzWu6a1MowyFdtw1pw3JfcjJ+z/kX4JqzzmKau8pji40YwZq7bXmcDjy1I6k7FMtRWzIN4UsWQFfFsZHHXT2pcXnNUSdl5fBVEo9UGIK//qhxya2LFdeUswfNNrRNWjJCDKqkmGw3n5frI+0yffbv7wjLIOYug/Lu6ZSW4YQPF5BRHGclJhRYxQ4BZ/FaFMXjitcBN67I2k3qnxGfkCx9Rx2XBGdOj4GwMa5q7vJDaT4N7tZIosxZQTeoAuitdeHqo58tnnW6CrNyx1m5H75A49y1vhQxzv0dZ58NADhybo8133Zj1gr3+175Fu/9Tm35KdMyxogptYGF5eT1c3eP0KULFuIzl16aHh2naxGeTSIijVKQRbizS4d1dytVpgCe7EzjXEegOGV6HNcO5LuVSlmEpWMVaGgn2QPAljOfBwCod881BtBbmT1gtxReQvavDp6Q5vmoEdPBSnfJVBO7b8m12Xbsyekfke+BTHX30jIF5xpXcgJ1Bfj0WRc4UmrPEZO+IElKLFAwJafJFYhYWzmwN+Ob9GxvyvMlunAnpuau/e7cvwdnT43hXZvTjXbUwbkPTE4ioZTRMmm7R7bNWazOFNIKzkPLZEED0xT/etllyu1TJtXwBDwi5aKuLvaelebuxVTO4NUDhfHuYfVdlTn33JK5dlFAtbIlmbcAkca5J7WOVOPk2kWoQdVWSzagO2Q3MUqFcQlIP/4ftvwBX9uTupUWZfi9tBF/J8sSdNPZF6dJ4thY+p5WHzeeE66QRQyqhqlEEzFaNs0cKsVZDKXYXuvCnT2H4YELLk8v5iy7hbeMha/P8rVW053eQsvY3P7yAqoJ8H4jC3dKGZ9MlAiT8uqQyoZW7mtv5VR4mqw+meauce5UPf+Un3J15ihz2VVWSlm6ZpLg/h070KRpeA4SRZmLp8UdmiLTurcMDuYKx+BvQ2m6umiTG28ogoQ7IeQKQsg6QshGQoi53s3SvZYQQgkh57evis7SHH+nME4ZUnxe4bznKiG7ptIyIV4h1uE0dz4T7kQI4qff9H7gpNOzE2lCN1dZqi88BTSNKqEqAbGYe8ZQaiwn7WWFdVDRLjYOXdqs0uyw85aKd0SA5m4pxfjpo16aJfUcykra0jFH0AOU+GiZLPxDiCtk2R25KjshBf8K3RRl28lJEyQg7AxTjZaR+5mPz9bdfKWJISYk5fTzOHeGAcZ5y37ucjUIKEbr9ZRzBwVIJFYkuuYe0QRdHR146zmp987k1KS77bniYr9rIGIbqEpzbCWR26MJITGA6wFcCeAsAFcTQs6ypJsP4P0AHmx3Ja31cvFsDLrmrhy2bLSxTzUzM5cPyA7T3C1p5s4XnZkLLOHhEGLRzyH+qUUzAmV+7sEC0pJG9x12J2RpLGKX7xKkCVYtXmbcB9RJKTOoRmkY4KefDKipP08diYdK8VIkbCWkvKVPc6dAxF0Ufdl67tlg8yjh5EGi2XTUghyKjTisWgocxjV3vkO1adp1FI1YuP55aBmDcyeWOtnruJ8pBrIsICQClp/M6guJlgHkHar2sUWwZEHq1kjr087+nVG8YaugiHnLHGiElHghgI2U0k2U0mkAPwDwaku6TwH4VwDmYYQzAJKz9HWdD5pyhupXUyIdet0ipUHEl80lTmICoGju2eYG9k5BnHsYLaNPThSOj06Lx1cJ3cB1x9zDcNpJz5cqFylp9nf1YMVczbtFmZTYhix+7bP/EFS7/CsZPAwJfKQ7RbrkV45+8/ZNmQL00DJGaj/MjTHcFVKlZYK8mCBp7tqzyqqVfZdYcrdNo0XyVRvT7G2a+7kpNYeLMhdKTsuEri6EK6JMyxAAH/simh2deNl4P5JGXXDuJIoQWSYt8W4ESFjEWFKvO4WjUOtCGS4k4XRYGxEi3I8BsF363cuuCRBCngvgOEqp+zyyNsPWVAOTk7jke9/DlqEh83AOuX9pfce161GU8R+34KbXvEtco6mVKs3WIxXG6w1c8r3voX/SMt91dgnOnYdDEPFANOGXC9sylvGSSVTLXLM0zl17oq0HCPCJqZk0saZrPjZ0SocVy5MXdYg4mYvlxlmvDUL7bfsuNqMfQxznxfpzIEnFumyQdZ4PAACUZswEgA0DA7joO9/BrzZtUqsqpS8LKtq5mHCnIIgik3NHkrAJlq08OC0TRZlCIv6XPauMVf7yRx2Xes0wF0rAzbm7ZrgOfkaD4goJoKNT+PMfuf5R5grJynad08reWz6pyR1+wE/LrDjiBDVvqtmeDpCgDxHutpqItyapJPoigA/mZkTItYSQ1YSQ1X2WGMdFoGpHaRV/uG4d7t+5M43z7NmBZvqEy9oUtHsAeubhDYyLWzxnDmqUotbMuGoX9o6P4f6dO80GnNOT8scsDglfZRi0THBAM8sKg4chiGPcdvEVoq4JpU7/XZ+roA1eWgZUpNFXBPIOXPbGZrtL33cuP2ChiH+wpe18rXn1mWeG5y1h/vanvbTMTuncASDj6IHUoLpmzx78Yfdu/OejjxrpisBuHxIFSfkGUB5EomUUSicRdhkCoJv5e8eSSyuliaS5e2gZC2K2kjU1d8tZuwA6xc5lu0EVAOYM7s80d3mHqs0uQAgop3rq0971Wvp/M8UZJz4ff1ywVLkW0SQV6AeWcg8S7r0A5NBnxwKQg4/MB/BsAHcTQrYAuBjAbTajKqX0Bkrp+ZTS85cuXarfLoQ8WkZ3L3SLb+StyQEAczpSARMBOLk+gdO3rUtzC9jwY9SULf14Z26Zc7dVv84097imaAopLWN5gOa4A4p0Mm3lqR/X6pAK1f910UXZPYV2SpfDRo3keCHCbU6q4JAZ7tVWvqhrjoiZ4zTs2puXT2xHPHq/0PrEPUmTbGhcKz/uDUgnN15LW+AvJ175RuBj/6amN7xlpPrL1IqjTw1Lu7YpIDT3RKdlCBExfq66Jw15IWvuPF36L1Na5Ab0aK0RIWxVbPFztzzWmZg7VIluO0mS1FsmrahwQ7Rr7gC45t5w0zKZK6SJdV1zjY9ncO6HkOa+CsCphJATCSGdAN4A4DZ+k1I6RCldQik9gVJ6AoAHALyKUrp6RmrMoTSWedswqIZ6efi8anQ8fB8uu/HT7rxEPvZlZkbLqJw732Xn5/NzOHehuauxZeTDOtTsaJDmntc+ImgWd5NDmu+nL71UpMkOtMhOkNLfRhFWOucO5PPujlC1Tvh803MGI4G6KpCFjR5egUr1oElTRDY0GXPeMJbv/Jo3AyefpaVXQamkX4Zw7oo7MEEHWy2pR0AmysEfHJGsOVMpL6kPDHV1A89/KTBPjcMiw8W5u1aIXdSmuatogqCZJIgpBSGRe1XMJi5XvHc9LaD22esXHetIStOQGoeiKySltAHgvQDuALAWwA8ppU8QQq4jhLxqpivoghIgyNJmpkeIRyh5G504/gVw563eOlJKcVx9EnMsGyYAJtxJ5gopOHfhCplvcHOmE5y7rFVR5Zg9vU6FD6ywlCtO6aEUYBOJMUyUGCJMGzRcF6XfIsSqdE2KVpje06BF2iRGGr288t4MkWY3IJKwadhWmMJbiIoToPQTnErvmBVlZP8QD+fuEpwdbHWZcPpx7SM4Y8/2dGIiRKldekkyAfMykkxz33jYUcA7Ppz5z1sQOw2qdrvMsQ0WJE/ZxKS1N0019xgUiONsbBk7VNMVFaej4IuvxCCPl/cuOwPkjMt5JbI0jAZVvWUOjOYeFBWSUno7gNu1a59wpH1x69XKh7pxwoRvEW5q8SVnVM8Zp0BKJ2x7+l7nfafmHhIVUgHFfcecikt2bMCWRUfgBEB0TlrrkAyY3BXSlUvrSDi3yIylANCtnVmb7X7kniYWzV0WijxudxEB3DUHuHEFpv76SnQxTwh1UGklFvUUkpKnRna7t0zT4/NOKc3X3ANhDyPLV1EeV0g1ZZoEQEesae5f+CiWANjW1aPYDVgiMRkpBlGutIAGeYsQpyukH8qGN60lKU3QTJI0ZlGUCXfj0BLWD8VYaZorPylX6f8p7nzd6/CtJ57AhcuWYUJS+hKhuR8YgS5j1u5QVTR3r8mX/3aT1MomD9cznSknSZZk5yAiJza2c2nH8m2Nc8/qVm82MdCVxqsYnMO8UiSDqqwpc28ZI+dQWsZRBw5V+0/vn3645uaoTF6pqDC+ITGFe97Ozzx4bQqeHc8+zh0waRnZNc/Y+So2tDDhrn17OU8bPr7kJOt1Gy3D6xl5DKouMdrJbBCJpsGmIX+14w4TafsbpZnWy2xZPHBWHox2VCrpeT7WXCEBbPufXxR1aFKKGqNGssiTltW0RMv4YtWLHdPStZcefzy+/YpX4L3nqQdxNClFLDj3Q4yWOWRh0dy98bFDKQ4NQugcthR49z8C7/pYdjMvNrbL4CgtxROShbnVNXfn8w/fJ4xJALD8hhvw9EC/kjdpcj4yQmbASznTCPYDJWzCz+jiMuduE+6ytsgN1XqUPJKlSbVes1xFkHMN0BciwHk9o9OmY89CtWde+l8JGN4ysVu4q5x7IjRIZx9syRWS/aGFEJDBhbQirAlBR0+qLBCtj1PJFVKgmWSLBEWHkvpvAc3d1q98raBw7pzyWrKMVaGJBtfc45rnKL+0/1v9+x21cSlD8tVmkmScuy3BDGLWCneZ17T1f9eZooDJM+ZtXBI47xJg7vzst9Txd73stUZyOa8d8xYDn71JraPQ3HU/d49B9alHga98Cs/vzxyWCJWoHWGIywIzZYdDpHWKKEXdQnHYOqvu7aG0j09zTySXOMOTQ3o/5j3y0jHN+8VCy5TR3OUa3rXsZDwu+dsbcGnvFsFEtL/lthuXJgm+x6AJtjlIIjUSxgcDJudedPwbtIz0bRTNPXCy6OroxCiJEU+pezSE86qcTdIUbaSeW8zezcGZ6xATfUHa1EbLxJLdqtlsIkaqHAhvGaurNBF0L/GdMuXxlkmvZ98i2x0bHWjFffYKd3kw1HhoUY+RtcxkmfvM+Kj4c/Ko41HXn5AqkUQRMEf1eQZg5dzh49xHhy31zDxgxNZom/bDDluIYHpxgNo3MemTgDppWsoQWnm2PE80I5rg3KVc5uqrFJtwL2H0VGRQFOGTnNawWuHD85fdSSPB6acY786EOw//ywPISp6QKufu0GxNMRfWk7Mw0lQRVM4VLFX/7IxjDMcxjtq5GfjZzdn7kCy2jMCiw5CtDmW6JjOohnPuWmW2PY1z9+/M8XQyY8tEErUpziKWNHfbQeEUEG6sPs1dmBQCPgWnZdS+dWBU91kr3GVt6rhHUqMlSRKs2fwAztmx0Uzv01g894InW0vnMzRvi3CihGBJY1rJIuJGOEngrd2/HwOTk+gfHzOLhkTtJLLIZIJU4ngTmh05plbEcg3mqTJKuQ5ahvu2oME9djThHmWauzN3xb2uFc1dnvBzvqZj8rA9JR8qQrRyIgstk9kiJM49SdA1Ngz61J24eOfT/roVRLo3gGvZnpWpo0m64hjTiLCsbwfw8++K63yHKgHF6p5F2Dt/MbAs2waj2mT4Xofw2CpyOA4AwHXvwQmjA2q+16teajQ2aZk4ilJKkSZIWD8kcZwphUZgQTBXSK65e0J/FIgtI2gZEgEXvCg9t/fP35r7XDswa4W77TSTjvoUzp0axdv+sMIbGtZH2ehP6dZ3d56mf4Mh/GStlkEWbwbnLvGCZ33zm7jou9/FF1etspbPPWD0szcpUcvlUSENzR32ca5r7qLqkxM4764fG+k7a3H6Tkni0dyldpAMjArkZ7gGGBizRblK1H+lSpiJC3jMdGiutQmAi45Kj4yThbvQ3CV3TyHokgQ9I4MAgNesU7+rf/dvPoR7LYBYNoo6KA/9zTviGHVrH0nVdsLy2j8vdTkllr4t7D8F7AY0JH2XtuvX4goZgYXvTWi2ESuOnee0RtwVUnDuPldIzrkDb33Ws4y7z1qyRPydcINqFKX1vvZj1lPCZgKz9oBs20D39Qm/a5mbPWutPg7hLuUre5fwARJJmq2MDQMD2Dw0aJTTSRMxmYlTi6Tlvnwgc50dOaYfBQbYPRVskwAAYGjAerm7owONCaQfg2lMTc2QSSTeM9V6TVCbt0wbI+tZhadTuJvX5UkvAsUVJ56Ic44+Ov0tvS/ng0XbyhM7paiztEeMZWeO+hDaI/nBGgDQ2WwgATBJzI001rYHWGgM+0oTIIjA6Cje723CXToQOjRwFtXzCIGFlomjKJ1QaSI8fojkCmmsqpmSISZmL+ee/rP6mmuw4JjjjdsvPf544P7079THHpUrZBHYNWof9SI9a1uaJgmw6h6DawseTLbOqy3dbUJCzl/k4XTXAt40vNu4tmnT/RktI3Gt6YXMWyahCaabaeRyY+BSezx3U3Nn+Y6Z3D+QfpcmYadLMeGuL8kVP36ZhJYha+7dPcpzRVBITOQcjydjH4slvrV7AQhVD0WRV5V81dLkG3SA7PuCCg2x27VnoqS3DKHMg4VSdDTrmIrYikprkcyXyCzHtgGLc+4ARIx0JxRaJlC4l9ian8RZHfjTMdtDAkoVWsbFuQNs1RBlqyp3JdNnF8/pzgy3EuRXaDIHhnYqJqGYvcLd2qiSFlzE4k4pcO8dwNc+gzn35Z8x+X8ue41xLYpMX23FC0fZTp/9qWjuIi/OuWcJj6pPYVljCleO7bfW6W3seDrx3vL7S5uYUuFu59dtHjRmOpbvZ/7OWg8Qkk4SVKZldM094z2Fh4SejSxoP/K59N/Y3V3z115E6R9FD7Y26sf+neBBs6S2i2VPLr7MV7xMspWZay9D2UM6xPMS597ZbGAqqqXtrLkA+uYOWx+RXSGJYSjUVquClgFgVcZMcIFsL9cBS+AwEU47SdBkEyepdYhDqnU344iVIcaeZ4Oi+DYhBlWbK+QBwjOKlvHC0KLlewkwmApNMjzoTscwtNDCmdnqI3WgNOqcmUTZ9DM39bKwhR/Y+fTvHLVRYQh3krl3NWmC+vQUOii1HH9nD0vgpGWcFSBoEiZccjh3EX7Alk2c0RnR0pTLJlHx7qobvbwi0+WxYpt8JP90fj4nB4/LAuicO3vbKF+4uxAaQ1w+dL2z2cRUHGNO0kDQWoa1g5uWSRFL9hJj2z8ghfwtoLk7/NxjTRiP9szDPO6tJvcv1rYx64dIEkT79qS3Fi/JOHXdW4atIAU1WvfsPhdjK18G1ZME82i5VWereEZp7pn/qdmRiCWd8lsShtl1x8C2+T3bBoJeDtdgj8t2Gcp1TY48VqlD0YEPSJw7sveJWYdvJgni/r2IAGzv0Xy6HSqc06DqQRMsXg6nuLRvpZycI/1fKZeVozzp0dxdcFXXKmocA9D3yoTJdfk7vu6sLKgXlVwheWYiLaU5m2VQmpbZyw7rJkj93Bskgm1rv9jEZCnGFvSWx5YBgJrNC0bR3LPIoMF0S2qpNS53ahz49JweqU4mLRNJK8hkIvUwixcsynaoWtqdSpx77AstYpMVyitk1z9x332IQRU7zIHC7BXutob17MQLHiSB/rg69E0oRpmEpCEMPvJ54H3/LC5zzX1N1zyRR2TR3EOha+5E0twbzQQNxj9O1swQt7Y31zcx5VeAoME5d4cLo3FYh6XgYxdYogd6OHGXd4m4TGxxwvVMHMLd8phM8EQsf45O2aAaS5o7SYWpSJkk4iANfRpvxfx21okXY915l4l355qzzVjpa5GFXWYfMTR3bigUbIcZxyZy2VUsoI5KdWmKzvxOKURxbHrLxFEk3CrrTFDP6ehwxm3ih3DzsXLWUw/56+iD1EZTjAY9adEizwMzg1kr3G2agEwr2M0lPJ12h1IhiPSubzPc2jX3HOHOcdqzlW3ufKgn8pKQCbGV27biL2+7zczDg0y4i4ohZh2+kTRRF9q0Kih5EC8dOi1z1U9/ipf893+7yydRqrlLgcN0oZmdNJU4Nfdui2CBR/txCe5CBroSmjuH/P07pEBpGefOiC+aDTqaJFK89HDaIg/ba3PEe6eKcAIQYvqQy/W3jJ0zB/Y4ys80d/5t+TiR6aCi4QcAWI2+NsRyfopwlzh3AlCaoM4olq7OTmEA1fvLZSN96K5PG0qabfVCCuy7SJIE85ImarWO3LTtxuzl3G2dXFaUda8A6kgIuGkZMyVLYzHmRjGo3jEDNG+utSaEZB2LdZre4WH8aP363DyUeggH9yzydiw096YQJlSjOFwbxHVf5/cNbMcbtrljcoOkhjgiTZhOzZ1SoTGZ+VgGTht4yzKce9PyHXk7cy5YfgfZc4Z7csibmLI/M+EeyqWHgsp8OOWHbLSwouXJJW+Z2OIFIgvNJElSl0nYV2fW/IGgw3MUZcqyouNB+QilwhWyVuuQ3HClMnZuBQAcM7wfDU3DniYROql+NkTAizC8/fF7D5oGPWs1d5m3feoYftq5pH0YH8BjUE2JUOdds+wwzV12ZXTlygd9U0oj6BlWKbkj3jr/CPH3lKVT8zg12VyVCfcmzUIM6AccpEfemb1WN6q9fmSPcLu0gnGdjUYDG/sHRB2UJBLtlAoesxvWps1zZ0kLvGVGUXgg2UJk2Nzm+AAnUjtzdMiukCSjZebQBKesXZ1p7pQKGkPXyGXapygoUWOrkCSN1Z/APYnb2uUPR5ntQaXzAXikRQCCnpHHIKcACUWw5s6pq1y4hLsw8DJXyCQR/HqtVrOfxDQ9Jf6saQrEtLXeeZx7hpdvf8r3FjOKWSvc5YYlkuFGXDO0c+Ufyz3+weQ8XEXbNHfLntgQzZ3TMpLmLnbZWeo8LnXkLstGC6FVSEG7IklzF8JEe4fEEQpgxCJQr3C4YwIAOrrQJARHbd+Af/z5T5X3EXWUOHfCz5fUMGfQLKPUDlVLuU687p24+ZTnGZebHmETSe3MIfs+c68k/p17xkdxOqc7kmyDjUuz1UsOEfXvP+88/MWpp6qcO2P7iUMrpsrfaWXGO81YSLLVIKYwN+dIfZLHgi8SfiCUnlJSybJA+rtJGA3Fj3ysZ4vJfAAAIABJREFUdSiTnqvMB3oWiThRU7Z60xxVQXHKMOXKgcKsFe7KQNcFGky5moU2hWXEZLSM4ToXauQP5dz1JIRz7hJfGPEt1OnzsuaYVx2bK2SmuSdiNaEfNu2q6YDF8PoW5lNv4CWvAt7/SSSE4LjGFL6/8/H0uiYA9P0ItoOvac2cVMpo7tkR3Py3B7UOPHHYMjMPj0E1ktrZWr6+gxPShiXJFdLFpZcJQ/CZS1+kUEOClmElqRXk48IsaMLiDpgx7shipkCiSTVaBlCDrOVBMfru3h72kOOwDu7nzjX3OIqzuEaKPUDNLgER4SVGbUZ8Xr+AXadx3kQwg5i1wt2muWcC2gJFQJr6UJIzSJWibRuoPK6ZabaOwS+EO8kiO7K8FjUbeMvgTmUJmVc7oUnKrpBsAB77w68h2bIhLc+y+UTO+5d/9UH01rpw4xEnG2V0u1w0X30NsPQog0M3NHfJ19jFufc/94XGtctPPNFeLuzUCSDN+8EaoYWa8nDugmJxr/OUeihlKJy7TstkNW8FBBDUV8I1WRssl/eMjhrX5PC9MaWZ94nIRxbuTZF3qGE7pSlZHsNhIRkU11pZaSasPqwepFYTzgoK5940NzRxyMJ95J4VLGO/wJbHeoxwudJuzGLhbhGwlt1xOlyC/+6tqVFlRNJWXAGMXK6QpWgZSXPn2hbX3D84sA037X4SiXReaB4fmXliUFFXrrn37OnFVff+nJXrF+7Dhx2B4065FNu6eqCjh/p9s43j8LT2EgpPkiCiiX3JbtHS53bZaIIUv96yxXpdXnmFxDI/e8lS45pr4gCkydRFGfHyZWVEZCxr7naUoWWygmSDqqYVO6op/7CJIyLlm3LuMSsqM5KLukqae5HYMmLche5rkP3cpb8T5ufO3U3lk5gUT56mukK5eDyLmzQmCff53/53rdz8dxrsYC6bCxbnpm03Zq1wV2kZ29LSPQyMpS6l2DyUagkdW9bpqY3nI4e3jIECnHt3Vxc6JeEu6xKJsuHC36HMSJQRIssgMQ2qejx1t0/5HNcJUTwvlwFV5J15LBDZV9r3DAB0uN3J+PcLhuPbvPpkc6Vi1dy5Dzf/7SpHi10vP5saVP0HMZeKDqlMJKyNSWQ9jMWXfaflbizlX5M9csREkvWNRHDuaU0CK599m8BNfC5bDGVeW0SOCsmUBmWiZ4bfNctPN/LYWesyruVq7tLf9yxdnv7xkquc9Z8pzF7hrvG2gL/7RNQv+PnE0Dk2ElK49VIZzZ17y8yR/GAJ1FDAzQI7VYUmKQx9ELSMUjVtQNzTu0OdHDk3afNBd0XM454/evx2Q3PPjFquoErWAdvjOUXJAaqpoXkapO22nZZh/4bSeRbN/cK1q9DNDppJ9AnRn1tQWYpBlRCAqMJXLkcuj7eZTbjLyoN5CAUUgZzwsMMFaBnFxpW3e5fXSdHcdYNqIkUVjaVVo0zLpML9d2ecb+RtC78h2sDFucubmEiE4VoncBD83J8Rwt2Y6W2Slk8A1CKuaLaBJ4SbtblC2uLL+wL+i6L5QJTeJ+JuXAxNqZMbJb/g8v+/vS+PrqO48v7dfk/vabflRbawZVvY8iLH2BbyFmz2xTZgs8QE4gQnQwJZnIQBMiHhZF/OB2QgyTecELJ8IZl8QwIZJnACkwCTMFkGCCFshhgbY+MVvMq2rOXpdc0fXd1dXV3Vy3tPy1P6d46O+nVXd92urrp169ZdvHU6qlp3aKsi1zEp3stPNm3yJn1WSJw2xuYDXLMB9GpC/NowhE0t3Yaq0o8hIMep7qvFFXzj5u9M6Zh7LfcFkHXSUh0Tjh3m1zV7MkXo3IlXTMw1hfR5qAYIIFnFNUOwbkrD1bm7IX9FyV3YUI3jxGTXG5G5e54tsgWQxcQdyd0QdO5+T1rVajV45RS8z2LdH8dSqLQoX+YuHguMGwD/WDEGhYrh25dUdaskTeUHFDdxNbA7pszcRQkkKHFAy2zPT9syYdexY85zzVFj/PfJ0jX//8j4qcCd97k6VEWVU/p7FWdd+BJRy8xblNw1A18puVcVIrnz/0S+FYQKMZQH/L+GuX/lHuBLdwvnFTp3ABX829bwbFxh9MRh9W4kSquNVbFl3Hr857Mayd1+rhV2QWLugkRctM49KKa6h6ELbSvq3Ik/y3S9sp3YMkI77Dlqha8+1BPcr71UIlJnIWb6VmWDhUjMnYhWEtFmItpKRDcrrt9ARK8Q0YtE9AQRTS09qVKd4rGqw0rnHD2nuBvvFhYGaYS6NczI54giSO79KbUO21RI7pPr6rw69yBrGdnM0H5Pfk9zXR3Men9cC7W0zGN4140uSi3QJy1BfZK7vYnME4co1TKlGhD8MbKqKKS4B8oJnv/XmkLWjQImTXNXICIvEvpmhRig6vmnAumIDEnnbm1a27FlpKL2gWiLwP//cc4i36MNyR/CSUvn3CxYywjZoOJYizglI0ruhscU0gWDpJZJpZCyx6FA58NbLQuyx3dFM710Eo5r+pQ4UZI5jJk7EaUA3AVgFYA2AFcRUZtU7K8AOhhjpwB4AMBtpSZUQZfwS5LcA7zKSFDBiJfsO5hnYESpW39OXKJ2Z6qUz/KlXoPF/MQOK6plpua6pYolxilZM1dnMkhXKOK0+CR3e4Lzvkc8pYB1b7/M3H1RIXkCC9PkWWr83VCl5gqv2Q/XSSza86Izd++GqpYCxd6FyNwzoorr4FtCmXBaQ2FvcvL6VYJNkNpn43s/iLmLL/Wcq4AUSsBnCin4mtgbqiyauhPg4y+K5L76Sh8NgHccOhuqorWMs5lvAj/5NvCz7yLHN1QrFeNERXXKfp5Gj05drgmpwVjkvldqRKl1MYCtjLFtjLE+APcBWCsWYIz9ljF2gv98CsDk0pIZDFktk1Pouu2PNP74EWlzFbDd4L0lAehUBipTyFTat7R97dAh57g7q2HuCskd8A5ukbkvPiGl2evzLiUNqS0Mw0BK4RAkM9Rsvh9T+nux6Ihldum+Y3wuI+vz5T0KZwVvmlZ+yahqmQJgU58v4nn+7RtXQAhzYoJKcheeWCGo3LYdO+Z3mpN15JGYpGI1R4ZX5RF4h4Vx1dW47ayzPOeaqqq8KwPJFFKk1zZBjKNz97xfEHNffIZAvFpF49j1C2kaDVihPhhjwJOPAI89iD4+vqoCrLFEVOT7reTbmtU4Gq38AyaA4709YEOQYg+IxtwnARDXK7v4OR2uAfCo6gIRXUtEzxLRs/v3749OpepZ4g/eodKGu9yXM62Ine6yPXIwLrdLRWFlSiemdAWqpDqvPrDDvV5bp3yWw9ikzp8VTOTMoE5+0Bu5TzSzsx5LSGf85ly90iCf0Wl9j6Zea4522yN+x/S1j8aJKW/nflVtZMWuNRillNzF9Y3jfaljXiqdu8gABb+Ku1962SexFyTAS6tPa9Oa1E5MIRXIm4EZsp/Kn+98a+vc4RMnnGumybCjsxMGgO6gPuypD65FT1S1jMZaxgocZoJM0wqAR8T9UQh9/e74smPgZFRCkAKpfB59QWq+9tNw1EjhtcmtIMbQV4pVWAGI0uOjrlRBRO8F0AHgdtV1xtg9jLEOxljH+PF+Z5E4IKkDA15zx1jtKW6oeqxwdHWrmHs6sDHnTfMHYQLcwRO04WQGdXLpmuMRZ+s7iZBSLB/lLdqU9JygDVUtbP22dJOsYhETJqTAtE5hsaoOcVozDSOSE1Pwtjj/LTwnVHJXrMy8Olm33XsCvajjw12LCqujKBuqHqW69F49XrWgay1j/csJKxHGTPRwxjlVFZ9fR7Pz0dy22VwTEA9d7F8atYydHzjFfUjESVUXvRRQM78KM6+OOSPQsKWiGgwMKcZQlVGoRQcBUZj7LgDNwu/JAPbIhYjoXAC3AFjDGIu67Vww1Buq4q6QekNVCSZGRAzXOStNIUNmfaqpV553NlQD1AaBdu4yUxYNhgDAMDC2RmFlInXOBmlJWrhSBhhV5fVq1QUOs5IHQy25l2gTyp62VSnj1Df433jOm96VniW5W+WcxOQaetV7McJ14dvmNfxVc6se0s2Go5YhxaQR/kRP72ua4p2o7A1VV9fm3pfPu8YAkb+nsC8ghAW4bu6Z+jt0G6p8pWJtavJ4TUTIgGH5JnfzWlTbhIIxpPL96ItQljGGFIa3KeSfAbQSUQsRZQBcCcCTQYKIFgL4LizG/nbpyfRDZeduu9yPMfsjSWni/Q5TjNAHVZJ7aBqtBkXeVQjL3oDOnw+U3L0yuK0mcCJlkoH6rMLLTqrvT7alwBUf4pcLZ67Vcn3yfoKdgd5JHly85K6DEy/fMEAULg+rap1wxK9CtMu5du668AN+yV0MpGUIqry7dr4QQl1hsOP3mAqtjEuTC1kV95WxLdZB61zgg//kuTbamcj5e4qrZybkiI3I4Dz7AoLk/rYigJ0NzypeqZbJO85IgRnTovQ500TazKMvZA+H8bbOMhP5iOqeUiO0xRlj/QA2Avg1gFcB/JwxtomIvkxEa3ix2wHUArifiJ4nonjpgwqAR3IHA7a/5t2pjyO5288AUNV5SDinHuxKa5lUGvjMnf7C3/4F8O7rgHZ/ICwAMJ00ZfpPEahzlxi/rSYQde4qyGqgtN0+re+w7rPL6WvWwpcoRZNDNc83VJWmkLHrDL4i69z1G4vhbyzG4XHWHGFqGa93jYNUmKNbHCHFrdQ9YgwZJ36PSnIPxozRo/HVcS14/MzLgE/dDozyxkgZV13trVF4H08C8KhOTGI5oW+rjCQcaJi7o5ZhzFm5pVRj13FiiiK5m6D+aJI7wFBpmsgPQf5UIGImJsbYIwAekc59Xjg+13fTAEOURqd2HgC++gk0L3bJkMdEYKdmzJnlqg97pTTVhmKlKhxtOg1MnwMsPhN45nfuheoa4LxLfeWd5xetc1dL7g5dunqlK2n7Pm4BMJq3b9tY9YpDCf4Oc196ynta1rkLknsaDKai85dqQ1XUuUeB2hnN/0wffVqCyXdZ7Itp7SSjqTtKw0irhRm9XXimrgHjD70de7KYPXYsdn70Y5hQXe0815sFye6/nD6PtYzpmFqqVJla8iXJfdXkBdh65Ii2vCGo9bxOTK7O3QyU3K2JQ469s2DaEnz24BvesqaJzq7jaAjpJ1ZKRYYsM5X9ezBQth6qExV65PpON8EDSdJuOmjm95hCei4oiy9SbQY7HzCmpKWxlhERqHM/8yLPTzvBh7OhqguqJJ2vkNQLpzc34z8vvxyfXrJEX3dE+DIx8UGUy/dbzC2VAs6S3qNEahlbbZKTBph2Mp3rT9YhQ5m1SjfYHTt34ZTQ19p7I8QyKhIZZjq+B4Wk2ZtYU+OViD12nbYTE39PYdwx04ytcxdt8Xu4me+fqkKSS2t07rB17oKXqKpf2W0ii1AHxjUpCGSoBgNFiBXDGEPlcFbLlBV0nn8A0oGmWH75fGc6q5We0qqoiI7nWyiVHrgeqgFqmSDJfeY78JfP3e38dFPzWb+19uI6tYwdmZIIF7S0oKYEAY/8krtV97P79ln1Gilg/UbsuO2nAnkxrWU05+tMqx/IfgZaNZ1iIG5uavH81piKaQjzT95jek+oy6pQiFpGdF5iDCkAfWD+BNl//R/U59RhD4KfLxxLtt5yDlVIQkMk8Fv283jyquBdHnI8ahnhMVxyN0zT8XNQCg18r04e1WsUEULBTKTy/agICD/tlrUl98EPGgaMMOYuRryrkGJ1BDJ35mcOThxnVb9SMVu705w0JZxQAace2A0AaDihl+ACde7wWoIYgDWgBFNIJWTmbo8oXzLrwKrV9Kz/mOe3zxSSt63BmBV8yp5QBOm6VJL7KK626s5k422ye+C9T3RiCoMt0ZoxX8cuXtPrNT2M8wbi5uS46hpvftLOQ8BdX0LHYU1WrUjUwXGic0L+SqaQhejcbRptoaY/REmnzMoGS2QzuJ17kM7dUctI1wxShK/r7UUqn1dmCvM8kv+vZCbMRHIvAYQPm8nJzD1o44pBNWy0AykokNeFV+LZVesD6vKiqdti6pMO7fOc/5d1H3eOzZBNt2mjJRtiZjrER99QDY6XEQ3WM1ONJ3nO5mWpWZAsHbUM4Mb9gF4Sx8J3FkRZd0UESUsDlZQv06fV1UtOPirsamjEa03TcFTR9jP3vqG4IzrslVx1JmvRYL9LXwESuw2x70h7VKMEgwRWgCmkOCGZ3EY+VHL3MHdhQ9eW3AW1jGo8NKesc++eMwcA8I0F5+AbY6Zgcp3C8fDGqzCj93hoCF9Gls690jRhDkG4X6Dcmft3f4VHxwmSskct42XAQZK7Mt4MoJfOJgREVzBSODhZ7bAUhH5JJ/yxc1c6xwv/7f8G3tsoe7+azGkLXYyWXsm0TFbLOAhYTl8zcQ7Oa17ovyDVaVZ6mbsd0phg6fptj9VI0vq1N+OXE/3LZde6R/2Mnkw2kimkEvymJ3bswKeffBI5VTLxkBVS0Jsdrh2Nt0ePVybTKApEzp4DpQxu9x1+W1igK8+m7tKznboAYNbWF4WC4goyKqsRdPtciAoNnC0+W1QLKezcVZiYs1YfG+bNAwBc/9Eb8b4v3IlPL16sLN+Yz4FU8ZokMAytWmZo1gulQirl7Yii56C8oRqQPYgxprUyUTKL2jr8dUwTFh5SL2kLsRGXmTvp4laoK/T+ZqZvUM2ftgRtfV1O0urOqlpsaGrDvXtfAQDUOMk9JLVMQLW/qRmLXSqJWA5K5ovvbjHZz3NLhP182SrWrE1tV5HBgcr4oX97MpVAcBh6Lewp4dz773fO3ejbUFW3lNOPAvpEriIDgDx9UDcNxQ0H4TpZ8dgyDqvUc/n+kNWbh4KTpvLn++liphkrN7FNlSO55/uRA+nvbWsHjh72CjCitQ4ZIFg69yBrKcMO9cH7ftowMIEbbOioNkLi0DBOSiUz0ZmoZQqEuJkiMPCUxNwbu/3Jfp37CougEvuOIBS1oy53ftN0g6nxSWLlirOxecYpbhnDwMO1rtXPpw7tcM4HPlvACV1Zfv7ZyjpMmLHCN/AtyV34bgrJPZKEHUOHfqyACcGGrJbZ1tkZQ3IPd1Iz+PUSy+1gIGdFRqlU6SR3kdKAiYAxd0M1qsAjToIsnw9WydzwdeCL31FGiOWVcrVMcGTGFVtfcMrL0G28pyoUjoEy7A3VRC1TGDxNHyC5hz1E1YWCFvGepel1n5WuFSC5GyWc3Y8fxcqnfw3A1UfeesYZeO7qq50iyoTegC/bkW9QjnfNw7pIM7CbTwZq6/Hp8a14O51Fs6S7dI3d+G9b5y5MFkFJqZ1BqCijswPv0kTlVGL5BcCFQkhZqZ5+1R5IHCcmCQu2vQwQ+aOVKjBNDvkcArtFDcMbFZIF7OP0h6lQFHbuqve3TCH5OIwauI3IWXWy/v5Qfbtzjw0xWQhvU4MFS+7ug6I709WpQnoIYCAsOLAL1cwES5h7YfCaELofVg6EFYTKIwewZv8Oz7mwcAQeBn7qad57I9fsImoyCc89uo6/e7tLi8aBgiTpGQDYmPGAIoKkjTfmLQU++jnnd69Ms82cKquBb/4c/1VjZYCaXOudMAwiT7vaNHokd/6sl6sVAaecctEld9uuP9Id7/9H4NL3u9UpmLtfclcPJYfxhHUKIs9g1O33hCUn1z/eVm9YD/7l1q3asrHCIyv67e+5XTozTZfZRhV4yN30PdrT7VjKnDphgp4EjeTOiDDj+GGsOLw3msClULVo7wpj2B5z0UQtUxhEJiHM2qkYg6BhhxwCWPn4yFfi4MHTLwFQmLSv3YATJzaN6iSfrvAxOjqkiKEi0JWvyAQPUs0+QVZSORG8tFPKq5bpIktTPLr1DLxr7lmKJ9qSu3gmmG0Tt14o5KsZzPSYUfabpj80r06tFmClYeNAxxmWZUcEWvIx3qA+58bvS+fz1uqB072vq0tfRwGSu/h+L2ZrLYcg02236B6q5NzT09eLHBEOb9yIZ9/3voA7BDAvc4+K3ZkqQLFJKu/FOQhh7mahWoQSouyZuzdmh9ighUk4kev1dJzCGX1XQF7QrnpF7lMBWt2oaKqpka77spXxLUeMVDBz11gQZCWmL6uEDJu5A5gyfTlaZ56OKfX1WHzyDPzgoot9z3MFd9UblFpzbUnu/Tu24he7XsCGI3t4LVLdOunMIVZPV+3pKyOrZbSrNQXO3+tK5+l8vydWOgUIP83HDmmv+aB4vz6+KmSMOan2IjsxGe4EZHD79NGVwWasXrWM1xTST6cak/rU6i7dXWaNPlk7AJzW3ekcT8wO35C/wxq6ONnFzpb2s7RZ6QM6ThxrGSbF5hDx2HVfCLxXN9CZaAYqS+6VVqCnvkxVpNyOHhtig5xBymIkq87ImZnkDVXbNZ4IOysqcbgii7Rh4Dfr1uG0SYq8MAWoZeznH+RmaV31DSGlhfsYQ8VXP47Lju/Hj/a9gpRh+HoF0zB3XTIWEZWpFCxrGaFOTdlCRZZUf87Tlw1T33ahTCGk3+TIsJy2zLzDbKNn1nJ17jDzkSYzj1omI0wEmiQecaBTj5kN0fNRNCTWMgXCYwopWssMrOQe1MHjLP6D2JMRYg7pqef7/4lfLVttnRcld5nOm/8ZuPwfwNLpSKzRczcZwPiJwPQ20Hs3Rrjbgmy/LuvcDUktM2/cuBCi9Buquha1q/tDdQMunXQKnj/dvyLQVifV0547gQZTcmTTfKvIVj9GtIiNcdQyItL5fsd6BAiW3MMw8aDfBFhUu+QEyZ3FFLI8oQQEz9LAe8QfE1wHOu+EUli76dQysUyV8wXa4BaJsmfuHsldGISyKWQhCOoO3uBJkuQeo46giSDMqccnedvRFvsDOtPkFmDVFYW59xNZqpfP3AEsUenCvfhkezs6FBthls5d+M2l3sp0Go+tW4dHL788mIwiVS//UdcYyzxNZrp2SkIROosINwG6guZZ3DSVhz2Owi7iqGVEWGoZgmma6MvnA1VAD8wMD54WhBy3pmemiclPPQ4AGL3r9Wg32xuqu7dj0pH9kZi7ri97HKcKldx15+NsOucS5l4gRMndPSxGcu+OEva1wM4S53lhDFge6HaHY/0B4REiPtt5pjh5xnznb559Nv6s2Aiz81g6vwUp6NypUzG2KthsUZUyTkfZNa3L8KGJc6ITrYAhSbld3Lv3a2OnuTRpJLnAmDIzLY9IjPLvrZRaLdNgWFPU0d4ezL/33sD8Bn2hZrl+6sQJ11LLEN7sPILc9i0AgMrDByLRSUSYe+wg8IUPY0rnATffQSxqOHTRImNAz9xjSO7nrC2w9uJQ9szdK7kLahl+fO3E2b57vjE9WDKpYiZaQ+yJAxfQMZigm6s0PnP33WM/K0hy51jd0oJuI4WnxgblOrfgtGqJ0oUREUYLao2wFIW+++0DlZ271CZPNDTh+6PD31EJbvMvM8KVrz4DAHghK9jv63TuQWzl4vcAX77HCjZnRy3kl3RKs8LsfQDK9QEgLO/uRMcbmwLVMn0hpnsqQUQ8lyNCnZnHha+/gAOdVhx2iipsSX0sklqG170z7TXj9UjXQyS599x0m+X3MQQoe+bu1bm7A8KOJSPGgl4x5VQcqazBQxOn44nq8A21mgBdWZDkHqsf8U5fiOTuV8twaSICc1/U1AR2003Y3rYosJxX566m58bxrZg/rfC476EpCiX02iqQg2+FlnVsOYgQOyrkF7+DI6kKH3NvOWzVu1PwUtRL7uShwwMj5UQRtZm21vSuWLS1O33sJ3s3BaplcmF7PSpPTuHUp5Ytc44X9xy1rkfU8curw6hqmXe0LMVCqQ+KDLiiQDWtrp10MZsKLTcQKHvmrte5W51JzFL+h+oG3Lz2wzieSiPDy+4JyM2YZkzLxAuVoGQ4HoMlUMvkuSki64kRLzwCnFbVdNQ7xk7Fi5WKCHoRkYrpwbevhjs2dR3HiVwO591/v17CKkZ9NmY8fjdqAogx/K7ebx2xLyVIipoJKi+ENw6CTWdYuW0ZvcpqX8rbl1/KChZNp6/yzDCBknuIWkbV90W1TKYiY+3teArE8FAV0BXBGZEAbMrW4qA0lkXGOlWxCRyJHt35iGqZMKOIgUTZM3evzt2/odqnGdwZ3rl3pvU2tIHBxgJ5RnSGYn+AUkjuedvD7oTeQcX3jDCmA6/0OxCIq5YxncQoJt7o7MTjO3a4FwNILIR+k9ufq0JGi4KDlrnbmYpC2plx3XI2pNz3R52kvdY+bQnOam53fq+ZtMC9SOKXDPbg7gthSGEyuJGu8DHzN9ZcrSktQfpGvVHMdTVlcgXH7xeerTkfVSJPJZJ74dDZuds6d9t07KHJszz3Zfn1Gxpn+p75zYZmAELqOVW9pZLcA+zpwz6O7KFq2pJLd3Tm3i++4xXX+ukT3eIHqKMacUMv2IyDW34EFpX+x4UJizGrNuhFwUFnLWO78oeaOfJnXdTl3XjsylQqy6mwtyKL39W4m7NdUrtWCMJKOiAnQS4kRK3SdUygy1qJeUvlRkfLxSsz6lwR1jIn1dVHqjPw2TpTyKg5eRPmXgTE7+rRuXNdNoCKWWfjW7OXeW57NWMtWXcporu9mLU20ib1nYCOLQRay8SREIvQucurh3w6vuSeF5n79BCrkgGS3FMxl65O/lczj5ztJGPHAiolYQBMMmAwE2nmn0Q8jEfzDvmI6hZSDMVtFVV4oP3sGNR6ERR0K0hy31MXvB+lktw9HsfptG+zO6oaQ2buqQjSd7HSdSHPjmwtUyIjhEJQ9sxdDBym0rkzEPq5aRZgBaRiAD7Y1IYzm9vxZkUVdrSv8DzTHrT1AdJNYJeL0amK0bnvkIJqdXOvy9S+nZHr9zB3BYMSKYiecCEe4g5Cp62UkrtkHlrkhGRn80mbJvaP8kqf3QLdYR6qYVEJmcLk7wQZOFIV7OYeBDk9nUhBSrBW2pypdo5XTV6AvbXBCalVns1iOxsUKG7OAAAS+klEQVSqMBQRVW9yK6UiTNelsEXXeWvr1GmR++wACURREIlCIlpJRJuJaCsR3ay4niWin/HrTxPRtFITqkNG2AWfcmCPcyzry2VLiRNGCk/yJeymC9zwrv96zeeQi/BBgiR3M4aawdG5F2AKeau0GumpsTY1jWNHItfvYY0auu2WHCideyoVc9IQ1DK5AfZENjlzzzCGgw2N2Fzlbhx7JHcN8zL45BMW9VM1cZ4wUnhtwhSsO2leAZT7JXdx9SCqZRZPdTMObREYvQ7KFhfVMhUVwATJ/DTimJDHbRTJXTdO4qwIc2HhI+Q6ozL34ayWIaIUgLsArALQBuAqImqTil0D4DBjbAaAOwHcWmpCdWg+rmZktumTrboI6iLita7qWo8uW+dEEcTcdWZxKhQjufdIVg1kpCwdcV+v+gYFcmGSO1GotUyxMGKuCFy1jCu563TaxW4GmyA09J7A+HwfWDoNUzdkdKGVeT80ycDnJs/VV6Qg7wRvlwfq9eFugyAzd/FXijP3M5vbcVSg/fVMdej+hIq5i/cYFRVW2GTxXMS+07Znm+d3lCAZum8bp1/pmLsuOXfk8APDXHJfDGArY2wbY6wPwH0AZJertQDu5ccPADiHBkrMk1CXUzOyUfx8HB3sM5X1YIx5loJ5TUKKoA3VOMH5D3NVyhsTp/quhVvLSOUNAzkhfsjZs04Prb9PfA+NdOW860DpD+N2FcO1lumTJPdS69ztSbcxn7MySHFSt1RYJokbJ8zCj+qbtIPdjk6aT6XwH2Oa9fUo+tPOIpJ6A1YYABHirzSfFF+qdNU+3wuwxBEREHPMqqciAwiB5XamswVPrlEMF3QlqjsPRq5Ht4msC/cQXS0zdJJ7FEXYJACiEncXANljxSnDGOsnok4AYwFE8zkuAvUa5i7jD7t3AwB++PLLyEsM4V0PP4xx05fjUKoC/b/9LdYK3WVM91Hl8wL1eTGccronNqN5+nJ8YsFyrJaupUM60Oisd/BXGAZyMJBFHr1EeKUmWHcKAGkxQYGivpQguQ+lQ4YI4mqc9Q8/jF/UNXqvKYKU2f8bq12VQ01IDkwb4opq1pYX8XKNNRk/VWXtd9zV0Aw0AC9rmMDBKa34TfUYbH/nKhhbtinLAOq2fTuVwT0vvqgoHRFyWwhT32Nbt+A8AD1ceKHZ57rlQhhxWrGa9Vo8ea8/WjMOywpeOYVDN05qd7nt/fiylThXWcpCv06tJkzamzI1mNtnGStE1ucPoeQehQupqPPleYhQBkR0LYBrAWDKlCkRqg7H2Hyf71xfugIZ7qX5ifZ2dFXVoqe/H9s6O3HyKGtQzhwzBsf6+tDd348jPT3oyefxxJtv4sKWFux7BcCelwAAjcc7fc8HgFMaG4EdryivLW/WS2gy3j93LrpyOXxw/nzftbDoiF9Z7s0AtbqlxdJ39uXBUhW486yzQutfN2cO8PsHrR8KyX1GQwPPvclwkpQu72cXXYT6bBbPvfUWZo0Jjj0fiJgD4D1tc4HHgQumNGPi1DloqKzEuk0EPLUDKelZt55+Ov64ezc2zJ2LxupqLGlqQsYwcPH06ZHqWjZ5MrDPjYs+qb4e6DqMOeMb8cCaNfjT7t1oqKzEbM37XzV/Ae5in8BH5s9HY2MT8PwjAIDN77oWonHuKeP9TlI11TX4xMKFaKisBP5mBeB6Zv16La1Pr1+PbiGu0K8uuwx3PHAMFy1eipngGbGOvA0AOGfiBGD/Vnz01A60jhuHzYcO4Y2jR1GZSuH6U4PDc7QraJ3vOecd+ksax6FtbDRTSBmn1IVvKE+sqcE3zjgDTVLGr4psJXDMOl74nuuc889+6BZ0fO9rnrJ1tWonvEVNJwFHrTbbPm8pGl9/AeOPHEAqqgA3zCX3XQBEbjUZwB5NmV1ElAYwCoAv4j9j7B4A9wBAR0dHSVbQqdPOB377sOdcRnC//+zSZUB9uATrwVlnAR/8dWCRMQHBrWoz0YPzj66sxC1LlyqvVYTo9WZLA2ZcdTWQzQJ9PajMZnHVnPCAWU31gsWNoj6DyJLo8ybS0vUrZltxe1a2tPjui4d4zL1tvCWtXz1njhWd8t9/BDz1mPUkiblf0tqKS1pbnd9hjEvGjAYv027g371j0iR0zJyJy2f6/SREiN/3EqHsrJWXecrVK/rMhzs6rL4IANvXAoaBRU1NvnI2FkvXVp98Mlb/05fcOoTVygUv/REAcPs55wTSr0J91m8+7Mm2JW2Czh8/vrD9mpo6VK27JrQYEeHGRf4wGiS0qRiMrmPJCuB73rKVlerx3CCs9i5ctATYuwU4gnCBxI5uGTkDVekRpcX/DKCViFqIKAPgSgAPSWUeArCBH78LwH+x2IE8CsRVHxmY5566PPj6EM7IDlTSg72ZGtXrU2TYugFod+SBUsvEHQD2CsO2lHrkPvdaRGeZ6HUZ3mP7uxfiVh7UZ1TMRXSnv+ojwLuv85eJgxh5hQOhGtois7OTqK+PHvPfh2mtwLfuB9pPCy+rg8KHxYeVV1j/dbmD7e9/xmrg1BXuoiTq+B/OG6qMsX4AGwH8GsCrAH7OGNtERF8mojW82A8AjCWirQBuAOAzlxwwhDGcQhv3w7cEX68KMRm7eD1w0wAbDansiXt7rP+R05oJTCqMYQ1YR43L3F1rGR82BmevKgobrncnokKSHgdNYoqwv6qEzUUh51dhDghs5q5JuxgJBSSM9+HyD4SXWcjNiSdMVl+3x9GsU7z9P1QgGWAjhAiI1EMZY48AeEQ693nhuAfAutKSFgOZrCWxfuV7QMNY4JGfu9KcZrkVijBGVhMSKGutPqHvoKA3OGSxA5FJ6QaU0xYDxNwb9aoGJWzm/v/uAE4733utdpS/fDHoEdpx1inAHx/jNBTCfAIG/Nx2YN2HgPsFfUFPxG8YFX093t/jY7a7jcFIXVsKQWL2gvAy0+cAH/0cME8THdUWeGxBwl4thk3uBKudhrPkXhawHSZGj7FyhJ53iXutGOkhCMPEckSLnp7wMkA0tYwt8R09XBxNKqy6Ahgb0457lOQe71lFlVgbKMbpSaXdNipILROg3jJSwAVSBqpSRxTslSzL3hlkP1JKFMLgSsAUo47R9tP0fGLN+4DpbcAp3EDQjrhaHbLRa1uyJcy9SFz/NeC6z7q2tTFDyGpx063A13+ovjZYS9wP3Oj9HTbgb/i69T9qjkxxAIS12+YizPJ0CFNvqZCucBlhdxfQJ3yLUku7YvhkI+VKcDodbRDsgR404L/xU6G+Ug9PaeIruA/z53gyDJWYiZVqI/KWbwFf+0Hh9084yUorWc15SzfvD2EJ4m++wwqzLAsig4iRwdxHNQCLBIedUjH32fOBRo1jxxhuX331J0tTlw6nnef9na2yJrJ//Lq6fH3MziRaEoWtci6JGLY1DgoVtFu5S/6brwP5fqBjBbDsXCuBdykhMuJU2mWIlQVMSjbqAlRH4oZwqaW+G/8PMGeh+7vFn6UsEuwN1dGCqa6KVnsCLGQCL5WuumWWPxRCMbj+q5aFVjbEwWzSNIs3lGLvoEAUsCtUBigVcw/CsnOA2jpg3uLwsqVEttI7kcloiuk/UBfDTHRmYTFOBgQt3Er8+7e5vy94V+nrOWct8MLT1jEB2Mv9+SLkqfUhkwXe93GgLaI55ox3xK8jCM0nA6uvAF79KzC11d1MjI2IM3LHcuDABwrLITrQas9rPlXY5Dlz3vAaBwEYmcx9MPRcRK4ebqAxow3Y+oq16XbJhuCyhehpv3Q3cCS6q3ZJUeinqh9tTeJ24uVC1CRR0NZuLeuf/b2lZ7XVNAWmbcMZF4aXuf1fgcMHgZNnhZeNi9kLrAlmSbiDWyjEb6dSAxopYPW7C3z2AI/hZfHt+8sNI5O525jbHl6mHPDJrwB7dlgbO1Hw8S+5OsIomDTN+tMhWxlf3RMV2SKsmRrGAft5+rQYwdJiY8Ik4MIrvecGcjOyYZz1NxAgijbBBEEluIcFnImL4eBHUuYYucz9278YOGlusFFVE52xA8D8Eq8ovvVAaZ8HWBYKz/2xcFNVAGhbCDzJmXvQ5DQQKIbukQJPcvoSh14eQiuTkYKROz1W10T30kwQjHS69G1pb8oVszE5hceHOWUJ8I6O4mmKAntPI2xDbSRD5aFa6rj6ieReNBLul2BoYOuui2HutsVS9/Hi6YmKz94J7Ns1pFYQQw/HB989Za9kilWFVtcCJ44PmL/c3xOS6THB0MC2Ry9GvTGGRyI8Gj3zVNGoqnEtdf7eITLg6lrg1h8DH/9ycc/ccD1/dsKaikXSggmGBh08b23c0AMi7E3HgdrsTaCGbu90bGPx6rtCYvYkUCJpyQRDg/MvB866uLhN7+paYOMXE0l6sDFvEfD4g0Brie3wPRicoLIjGQlzTzA0ICqNNdMCdSz8BAOIue3Ad39V+tg3gCv5D4Yj4ghHwtwTJEgQHwPB2AHLvHX1u4HzLh2Y5/8dIWHuCRIkGD4wUsBlEeKwJwhFsqGaIEGCBCMQCXNPkCBBghGIhLknSJAgwQhEwtwTJEiQYAQiYe4JEiRIMAKRMPcECRIkGIFImHuCBAkSjEAkzD1BggQJRiCIqWIzD0bFRPsB7Cjw9nEADpSQnIFGOdFbTrQC5UVvOdEKlBe95UQrUBy9Uxlj48MKDRlzLwZE9CxjbJCyMxSPcqK3nGgFyovecqIVKC96y4lWYHDoTdQyCRIkSDACkTD3BAkSJBiBKFfmfs9QExAT5URvOdEKlBe95UQrUF70lhOtwCDQW5Y69wQJEiRIEIxyldwTJEiQIEEAyo65E9FKItpMRFuJ6OZhQE8zEf2WiF4lok1E9El+/otEtJuInud/q4V7PsPp30xEFwwBzduJ6CVO17P83BgieoyItvD/Dfw8EdG3Ob0vElGR6e1j0TlLaL/niegoEV0/nNqWiH5IRG8T0cvCudhtSUQbePktRLRhEGm9nYj+xul5kIhG8/PTiKhbaOO7hXtO5f1nK38fUtU3QPTG/vaDwTM0tP5MoHM7ET3Pzw9O2zLGyuYPQArA6wBOBpAB8AKAtiGmqQlAOz+uA/AagDYAXwRwk6J8G6c7C6CFv09qkGneDmCcdO42ADfz45sB3MqPVwN4FFau+6UAnh7Cb78PwNTh1LYATgfQDuDlQtsSwBgA2/j/Bn7cMEi0ng8gzY9vFWidJpaTnvMMgGX8PR4FsGoQ2zbWtx8snqGiVbr+zwA+P5htW26S+2IAWxlj2xhjfQDuA7B2KAlijO1ljD3Hj48BeBXApIBb1gK4jzHWyxh7A8BWWO811FgL4F5+fC+AS4TzP2YWngIwmoiahoC+cwC8zhgLcnwb9LZljP03gEMKOuK05QUAHmOMHWKMHQbwGICVg0ErY+w3jLF+/vMpAJODnsHprWeM/Q+zuNGP4b7fgNMbAN23HxSeEUQrl76vAPBvQc8odduWG3OfBGCn8HsXghnpoIKIpgFYCOBpfmojX+7+0F6aY3i8AwPwGyL6CxFdy89NYIztBawJC0AjPz8c6AWAK+EdHMO1bYH4bTlc6P4HWNKijRYi+isRPUlEK/i5SbDoszEUtMb59sOhbVcAeIsxtkU4N+BtW27MXaV/GhbmPkRUC+AXAK5njB0F8B0A0wEsALAX1rIMGB7vcBpjrB3AKgAfI6LTA8oOOb1ElAGwBsD9/NRwbtsg6OgbcrqJ6BYA/QB+yk/tBTCFMbYQwA0A/j8R1WPoaY377YeaXgC4Cl7BZFDattyY+y4AzcLvyQD2DBEtDoioAhZj/ylj7N8BgDH2FmMszxgzAXwPrnpgyN+BMbaH/38bwIOctrdsdQv//zYvPuT0wpqEnmOMvQUM77bliNuWQ0o338C9CMB6rg4AV28c5Md/gaW3nslpFVU3g0prAd9+qNs2DeAyAD+zzw1W25Ybc/8zgFYiauHS3JUAHhpKgrg+7QcAXmWM3SGcF/XSlwKwd9EfAnAlEWWJqAVAK6xNlMGit4aI6uxjWBtqL3O6bCuNDQB+KdB7Nbf0WAqg01Y5DCI8ks9wbVsBcdvy1wDOJ6IGrmY4n58bcBDRSgCfBrCGMXZCOD+eiFL8+GRYbbmN03uMiJbyvn+18H6DQW/cbz/UPONcAH9jjDnqlkFr21LvGg/0HyyLg9dgzXa3DAN6lsNaOr0I4Hn+txrATwC8xM8/BKBJuOcWTv9mDJClQQC9J8OyGHgBwCa7DQGMBfAEgC38/xh+ngDcxel9CUDHINNbDeAggFHCuWHTtrAmnb0AcrAkr2sKaUtY+u6t/O8Dg0jrVlg6abvv3s3LXs77xwsAngNwsfCcDlhM9XUA/wLuDDlI9Mb+9oPBM1S08vM/AvBhqeygtG3ioZogQYIEIxDlppZJkCBBggQRkDD3BAkSJBiBSJh7ggQJEoxAJMw9QYIECUYgEuaeIEGCBCMQCXNPkCBBghGIhLknSJAgwQhEwtwTJEiQYATifwHAnXNUg5n4TQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(y_valid_set[:,-1].data.numpy(),color='darkcyan')\n",
    "plt.plot(one_step_predictions.data.numpy(),color='tomato')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
